簡體   English   中英

在jQuery中,如何在每個循環中動態刪除數組元素?

[英]In jQuery, how can I in an each loop remove array elements dynamically?

假設我有一個數組:

var arr = [1,2,3,4,5];

我用jQuery.each循環它們:

$(arr).each(function(index, value){
    if (somethingIsTrue){
        // Based on if "somethingIsTrue" I want to remove this particular item from the array at this point
    }
});

我該如何實現?

var arr = [1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 10, 11, 12];
var arr1 = []   //make a separate array to store numbers fulfilling specified condition

$.each(arr,function(i,v){
    if(somethingIsTrue){
    arr1.push(v)  //fill second array with required numbers fulfilling specified condition
    }
});

工作演示

要么

var arr = [1,2,2,2,3,4,5,5,5,6,7,8];
var filteredarr = $.map(arr,function (value,index) {
  return (somethingIsTrue ? value : null)
});

'filteredarr'將是另一個具有滿足條件的數字的數組。

工作演示

要么

嘗試.splice() ,如下所示:

var arr = [1,2,3,4,5];

$(arr).each(function(index, value){
  if(somethingIsTrue){
    arr.splice(index,1)
  }
});

工作演示

要么

$.each(arr,function(i,v){
  if(somethingIsTrue){
  var i1 = arr.indexOf(v);
    arr.splice(i1,1);
  }
});

工作演示

注意:-如果數組不包含重復的數字(如在問題中指定的發問者),則后兩個答案絕對可以正常工作,並且前兩個答案在任何情況下均適用。

您嘗試執行此操作的方式存在許多問題。 您不應在數字數組上使用$(arr) ,並且在遍歷數組時也不應從數組中刪除元素。 那是有缺陷的代碼的必經之路。

而不是jQuery和each() ,應該使用Array.prototype.filter (如果需要支持較舊的瀏覽器或絕對希望使用jQuery,也可以使用$.grep() ):

var filtered = arr.filter(function (value) {
    return !somethingIsTrue;
});

調用此方法后, filtered將是一個數組,其中包含somethingIsTrue不為true(這是我認為您要的內容)的所有項目。

如上所述,jQuery的each不是在這里使用的工具,但一般而言,您應該只使用$(arr)arr只包含DOM元素。 要遍歷jQuery中的普通數組,請使用$.each(arr, callback)

工作實例

試試這個小提琴, http://jsfiddle.net/devools/35aysq6t/

var arr = [1, 2, 3];


$(arr).each(function (index, value) {
    if (value = 2) {
        arr = jQuery.grep(arr, function(value) {
            return value != 2;
        });
    }
});

$(arr).each(function (index, value) {
    $('.array').append(value + ',');
});

暫無
暫無

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

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