[英]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.