繁体   English   中英

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

[英]How to iterate over an array of object then remove each element in JavaScript

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

它只是没有按我预期的那样工作。 赞赏有人可以为我提供方法。 谢谢

它不起作用的原因是您要递增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是对其的唯一引用,则可以为其分配一个空白数组。

为什么不简单地做

for (var i = 0; i < someArray.length; i++) {
    someArray[i].action();
}

someArray = [];

您需要先确定长度,而不要在每次迭代中都将其计算在内(这对性能也有好处)

这是一个小提琴: http : //jsfiddle.net/hW4Mm/22/

魔术在这一行中: var len = someArray.length;

那应该工作。

只需尝试:

while (someArray.length) {
    someArray[0].action();
    someArray.splice(0,1);
}

要么:

while (someArray.length) {
    someArray.shift().action();
}

通过遍历数组,然后使其成为空白数组,可以非常简单地完成此操作。 希望这对您有所帮助!

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

wutt ??

您想在迭代时修改集合吗? 您需要在删除项目后添加其他逻辑

您有2个物品,易卜拉欣和伊斯梅尔

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM