在Javascript中迭代对象数组-为什么我不能在增量块中获得当前对象
Iterating over an array of objects in Javascript - why can't I obtain current object inside for increment block?
假设我有一个数组
var array = [
{name: "woo"},
{name: "yay"},
{name: "hoopla"}
]
为什么这个工作
for (var i=0; i<array.length; i++) {
var item=array[i];
alert(item.name) // woo, yay, hoopla
}
但这不是?
var item;
for (var i=0; i<array.length; item=array[i++]) {
alert(item.name) // undefined
}
下面是一个比较不同答案速度的jsPerf测试用例:http://jsperf.com/different-ways-to-iterate-over-an-array-of-objects/2
在循环的第一次迭代中,item=array[i++]
尚未执行,因此item
仍然具有其初始值。for
语句的第三部分在迭代之间执行,而不是在循环开始时执行。
应该可以了
var item;
for (var i=0; item=array[i], i<array.length; i++) {
alert(item.name) // undefined
}
因为第一次通过循环,变量item
没有被赋值
一个for
语句有3部分,计数器(var i= 0;),限制(i<array.length;)和递增(i++;)>
把这些位想象成3行不同的代码。不过,这三行代码不是按顺序执行的,而是如下所示
- 执行'counter'并设置变量
- 检查'limit',如果布尔值为
true
,则执行大括号中的代码 - 执行大括号中的代码后,执行"incrementor"
- 循环从第二步开始重复,直到极限返回
false
直到for
循环的花括号中的代码被执行后,递增器的最后一位才会被执行,所以本质上,在那个时间点,item还没有被赋值。
因为在第一次迭代中item
还没有定义,所以如果您将代码更改为:
for ( item=array[i=0]; i<array.length; item=array[++i] ) {
alert(item.name)
}
JavaScript中另一种枚举对象数组的方法:
for(var item in array)
alert(array[item])
相关文章:
- 在ejs-partial中对JSON对象进行迭代
- 如何在DataTables 2.1中迭代对象数组
- 使用对象通过JSON进行迭代
- 基于使用angular在下拉列表中选择的对象,迭代对象内部的对象
- 如何在我传递给视图的ViewModel集合中获得jQuery可选对象的值,以作为有序列表进行迭代
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- JavaScript1.7区分数组和对象的迭代程序
- 为什么数组在对象内部迭代对象时存储重复值
- JS对象->来自jquery ajax的JSON提交->php迭代
- 在对象上迭代.解构其键和属性并添加新的键和属性
- 对数组中的json对象进行迭代
- 如何迭代json对象结构以只获取名称
- 在对象上迭代以验证它是否's键存在于数组中
- Javascript - 从对象迭代和删除
- 如何使用Meteor.js中的Template辅助对象迭代对象中的两个数组
- 我的 JS 对象迭代在添加新属性时中断
- 对象迭代语法
- 反向对象迭代(javascript)
- chrome为对象迭代器显示了什么?
- JavaScript对象迭代