簡體   English   中英

如何按值刪除數組中的多個項目?

[英]How to delete multiple items of an array by value?

我試圖創建一個removeAll()函數,它將刪除具有該特定值(而不是索引)的數組的所有元素。

當我們對循環進行任何更改時,棘手的部分就出現了,索引往往會移動(使得它很難使它像我們想要的那樣工作),並且每次進行更改時重新啟動循環在大數組上都是非常低效的。

到目前為止,我編寫了自己的arr.indexOf函數(對於較舊的IE支持),它看起來像這樣:

function arrFind(val, arr) {
    for (var i = 0, len = arr.length, rtn = -1; i < len; i++) {
        if (arr[i] === val) {
            return i;
        }
    }
    return -1;
}

刪除這樣的元素很容易:

var myarray = [0, 1, 2, 3, 4];
var tofind = 2;

var stored_index = arrFind(tofind, myarray);
if (stored_index != -1) {
    myarray.splice(stored_index, 1);
}

alert(myarray.join(",")); //0,1,3,4

但是,正如我前面指出的那樣,在循環時執行此操作時,我們遇到了麻煩。

有關如何在循環中正確刪除數組項的任何想法?

以相反順序循環或使用不要刪除的項構建新數組。

每個新瀏覽器都有一個Array過濾方法:

var myarray=[0,1,2,3,4];
var removal=2;
var newarray=myarray.filter(function(itm){return itm!==removal});

試試這個吧。 您只需要檢查要刪除的數字的索引。 我在你的數組中添加了其他元素。

var myarray = [0, 1, 2, 3, 2, 2, 2, 5, 6];
var indicesToRemove = new Array();

for(i=0;i<myarray.length;i++){
    if(myarray[i]===2){ //let's say u wud like to remove all 2 
        indicesToRemove.push(i); //getting the indices and pushing it in a new array
    }
}

for (var j = indicesToRemove.length -1; j >= 0; j--){
    myarray.splice(indicesToRemove[j],1);
}

alert(JSON.stringify(myarray)); //myarray will be [0,1,3,5,6]

我寫了這個小函數,其中arr是原始數組,d1,d2是你想要刪除的值。 我想知道如何將其推廣到要刪除的任意數量的值。 好吧,我只是個初學者。

function destroyer(arr, d1, d2) {
    var lean =[];
    for (var i = 0; i<arr.length; i++) {
        if (arr[i] != d1 && arr[i] != d2) {
            lean.push(arr[i]);
        }
    }
  return lean;

暫無
暫無

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

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