簡體   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