如何迭代对象数组然后删除JavaScript中的每个元素

时间:2014-06-09 08:28:05

标签: javascript arrays

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);
}

它只是不像我预期的那样工作。感谢有人可以提供给我的方式。感谢

6 个答案:

答案 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)