JavaScript foreach中的sum索引
sum index in JavaScript foreach
在下面的代码示例中,我得到一个奇怪的行为
var data = ['xxx', 'yyy'];
for (var i in data)
{
var a = i;
var b = data[i];
}
前两个迭代工作得很好。我在i
中得到索引"0"
和"1"
,然后它再循环一次,现在i
是"sum"
。这是经过设计的吗?或者这个额外的迭代是用来做什么的?在我的例子中,结果总是空的,它弄乱了我的代码。有没有办法不做额外的循环?
BRAndreas
看起来您(或您包含的其他代码)已经在Array原型上添加了额外的属性。你应该做的是检查你要迭代的对象是否在本身上有那个属性,而不是在它的原型上:
for (i in data) {
if (data.hasOwnProperty(i)) {
a = i;
b = data[i];
}
}
也就是说,永远不要在数组上使用for .. in
。使用常规的for
循环。
查看更多信息:http://yuiblog.com/blog/2006/09/26/for-in-intrigue/
您正在遍历Array
,而不是Object
。对于数组,最好使用:
for (var i=0; i<data.length; i=i+1){
/* ... */
}
在你的循环中,数组对象的每个属性都被考虑在内。这使得数组的for ... in
循环更不可预测。在你的情况下,看起来sum
是一个属性(方法),添加到Array.prototype
在你的代码的其他地方。
有更多遍历数组的方法。例如这个so问题,或者这个
只是为了好玩,一个更深奥的循环数组的方法:
Array.prototype.loop = function(fn){
var t = this;
return (function loop(fn,i){
return i ? loop(fn,i-1).concat(fn(t[i-1])) : [];
}(fn,t.length));
}
//e.g.
//add 1 to every value
var a = [1,2,3,4,5].loop(function(val){return val+1;});
alert(a); //=> [2,3,4,5,6]
//show every value in console
var b = [1,2,3,4,5].loop(function(val){return console.log(val), val;});
这是一种安全迭代的方法。
var data = ['xxx', 'yyy'];
for (var i = 0; i < data.length; i++)
{
var a = i;
var b = data[i];
}
你得到的是一个方法来自扩展数组对象,我猜你正在使用一些库,那里是类似的东西Array.prototype.sum = function () {...};
也许这样设置数据会更好:var data = {0:'xxx', 1:'yyy'};
首先data
是一个对象。尝试添加console.log(a);和console.log (b);在循环中,你会看到。
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 在索引.html和应用.js [node.js] 之间共享变量
- 如何为高图中的区域线创建z索引
- 下拉列表在使用z索引放置在前面后停止工作
- 减去两个索引不同但值相同的整数
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- Javascript:根据对象的嵌套数组中的值,在数组中查找对象的索引
- 用javascript查询lucene索引
- 使用它更新集合中的嵌套数组's索引
- 如何将ng选项的索引作为angularJs中的值传递给模型
- Javascript获取所有锚链接的索引
- 多维关联数组的最后一个索引
- 传递给 PHP 表单时 JavaScript 动态变量上的未定义索引
- JavaScript foreach中的sum索引