Tom*_*ert 120 javascript jquery
可能重复:
迭代对象文字值
我在JavaScript中有对象:
var object = someobject;
Object { aaa=true, bbb=true, ccc=true }
Run Code Online (Sandbox Code Playgroud)
我怎么能用它呢?
object.each(function(index, value)) {
console.log(value);
}
Run Code Online (Sandbox Code Playgroud)
不工作.
Wil*_*der 307
javascript对象没有标准的.each函数.jQuery提供了一个功能.请参阅http://api.jquery.com/jQuery.each/以下内容应该有效
$.each(object, function(index, value) {
console.log(value);
});
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用类似于此Object.keys()
的Array .map()
函数使用vanilla Javascript
Object.keys(object).map(function(objectKey, index) {
var value = object[objectKey];
console.log(value);
});
Run Code Online (Sandbox Code Playgroud)
请参阅https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Object/keys和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /阵列/地图
这些通常比使用vanilla Javascript for循环要好,除非您真正理解使用普通for循环的含义并查看使用它的特定特性,如循环遍历属性链.
但通常情况下,for循环并不比jQuery
或更好Object.keys().map()
.我将在下面使用简单的for循环讨论两个潜在的问题.
是的,所以在其他答案中也指出,一个简单的Javascript替代方案
for(var index in object) {
var attr = object[index];
}
Run Code Online (Sandbox Code Playgroud)
这有两个潜在的问题:
1.您想要检查您要查找的属性是来自对象本身而不是来自原型链.这可以通过hasOwnProperty
这样的功能来检查
for(var index in object) {
if (object.hasOwnProperty(index)) {
var attr = object[index];
}
}
Run Code Online (Sandbox Code Playgroud)
该jQuery.each
和Object.keys
功能自动照顾这.
2.普通for循环的另一个潜在问题是范围和非闭包.这有点复杂,但是请参考以下代码.我们有一堆带有ids button0,button1,button2等的按钮,我们想在它们上设置onclick并执行console.log
如下操作:
<button id='button0'>click</button>
<button id='button1'>click</button>
<button id='button2'>click</button>
var messagesByButtonId = {"button0" : "clicked first!", "button1" : "clicked middle!", "button2" : "clicked last!"];
for(var buttonId in messagesByButtonId ) {
if (messagesByButtonId.hasOwnProperty(buttonId)) {
$('#'+buttonId).click(function() {
var message = messagesByButtonId[buttonId];
console.log(message);
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果在一段时间后,我们点击任何按钮,我们将始终"点击最后!" 在控制台中,从不"先点击!" 或者"点击中间!".为什么?因为在执行onclick函数时,它将在那时messagesByButtonId[buttonId]
使用buttonId
变量显示.并且由于循环在那一刻结束,变量仍将是"button2"(它在最后一次循环迭代期间具有的值),因此将是,即"最后点击!".buttonId
messagesByButtonId[buttonId]
messagesByButtonId["button2"]
有关闭包的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures.特别是该页面的最后一部分,涵盖了我们的示例.
再次,jQuery.each
并Object.keys().map()
为我们自动解决这个问题,因为它为我们提供了一个function(index, value)
(具有闭包),因此我们可以安全地使用索引和值,并确保它们具有我们期望的值.
Sak*_*tel 73
for(var key in object) {
console.log(object[key]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
403425 次 |
最近记录: |