簡體   English   中英

jQuery遍歷循環刪除元素

[英]jQuery iterate through loop delete elements

我有一個對象的javascript數組:每個對​​象都包含鍵/值對。 我試圖遍歷此數組,並刪除其特定鍵的值(例如“ Industry”)的值與給定值不匹配的任何對象。 這是我的代碼,由於某種原因,它沒有遍歷整個數組,並且我認為這與以下事實有關:刪除項目時,循環計數器會以某種方式被破壞:

var industry = 'testing';
var i = 0;
for (i = 0; i < assets_results.length; i++) {

    var asset = assets_results[i];
    var asset_industry = asset['industry'];
    if (industry != asset_industry) { assets_results.splice(i,1); }

}   

有任何想法嗎? 提前致謝。

這是因為當您拼接一個元素時,數組的大小將減少一。 拼接后的所有元素將一個位置移至數組的開頭,並填充拼接后的空間。 因此代碼缺少一個元素。請嘗試此代碼。

var industry = 'testing';
var i = 0;
for (i = 0; i < assets_results.length; i++) {

    var asset = assets_results[i];
    var asset_industry = asset['industry'];
    if (industry != asset_industry) { 
              assets_results.splice(i,1); 
              i--;
    }

} 

splice從數組中刪除一個元素並調整其大小:

var arra = ['A', 'B', 'C', 'D'];
arr.splice(1,2); // -> ['A', 'D'];

這意味着您在拼接時不應該增加i,因為您跳過了下一個元素。 拼接將使i + 2元素成為i +1元素。

var industry = 'testing';

for (var i = 0, max = assets_results.length; i < max; ) { // Accessing a property is expensive.
    if (industry != assets_results[i]['industry']) {
        assets_results.splice(i,1);
    } else {
        ++i;
    }
}   

在迭代對象時修改對象時,這是一個常見問題。 避免此問題的最佳方法是創建一個新數組,並僅在通過測試的情況下才添加對,而不是從現有陣列中刪除對。

var industry = 'testing';
var i = 0;
var asset_results_filtered = [];

for (i = 0; i < assets_results.length; i++) {
    if (industry == assets_results[i]) {
        asset_results_filtered.push(assets_results[i]);
    }
}

編輯:您的代碼看起來有點不合邏輯-我修改了示例以使用給定的變量。

嘗試以下方法:

var industry = 'testing';
var i = assets_results.length - 1;
for (; i > 0; i--) {

    var asset = assets_results[i],
        asset_industry = asset['industry'];
    if (industry != asset_industry) { assets_results.splice(i,1); }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM