someArray = [{name:"Ibrahim", cid:322}, {name:"Ismail", cid:423}];
正如您在上面所看到的,这是一项简单的任务,但是我没有找到可靠的方法来迭代这个数组,执行一些操作,后面的结果如下所示
someArray = [];
到目前为止,这是我已经来到的地方
for (var i = 0; i < someArray.length; i++) {
someArray[i].action()
someArray.splice(0,1);
}
它只是不像我预期的那样工作。感谢有人可以提供给我的方式。感谢
答案 0 :(得分:3)
它不起作用的原因是你正在递增i
,但修改了数组。
最简单的方法是在最后清除数组:
for (var i = 0; i < someArray.length; i++) {
someArray[i].action();
}
someArray.splice(0,someArray.length);
但是如果你有在每次传递时更新数组
while (someArray.length) {
someArray[0].action();
someArray.splice(0,1);
}
或者如果替换数组而不是清空它就可以了:
for (var i = 0; i < someArray.length; i++) {
someArray[i].action()
}
someArray = [];
请注意,在最后一种情况下,如果任何其他变量或属性指向旧数组,则无法清除它。但如果someArray
是唯一的引用,那么你可以为它分配一个空白数组。
答案 1 :(得分:0)
为什么不简单地做
for (var i = 0; i < someArray.length; i++) {
someArray[i].action();
}
someArray = [];
答案 2 :(得分:0)
您需要先确定长度,而不是在每次迭代时计算长度(这对性能也有好处)
这是一个小提琴:http://jsfiddle.net/hW4Mm/22/
魔术在这一行:
var len = someArray.length;
这应该有效。
答案 3 :(得分:0)
试试:
while (someArray.length) {
someArray[0].action();
someArray.splice(0,1);
}
或者:
while (someArray.length) {
someArray.shift().action();
}
答案 4 :(得分:0)
这可以非常简单地完成,通过循环遍历数组,然后使其成为空白数组。 希望这有用!
someArray.forEach(function (person) { // Use Array#forEach to itterate
person.action(); // Call action on person (person = someArray[i] in your example)
});
someArray = []; // Now make someArray = to a blank array
答案 5 :(得分:0)
wutt ??
你想在迭代时修改集合吗?删除项目后需要添加其他逻辑
你有2件物品,ibrahim和ismail
when entering the first loop (i = 0, length = 2, 0 < 2 => iterate)
ibrahim action is called
and then the ibrahim is removed
when entering the second loop (i = 1, length = 1, 1 < 1 => quit loop)