2012-08-09 75 views
2

開始我有一個JavaScript陣列等jQuery的刪除數組元素如果元素值與指定的字符串

["1.A","1.B","1.C","1.D",...,"2.A","2.B",...] 

現在我想通過一個指定的字符串,以除去從這個數組元素。如果我指定了「1」,那麼它應該刪除所有的「1.A」,「1.B」,「1.C」,「1.D」....如何在jQuery中做到這一點。

+0

如前所述,最簡單的解決方案是一個'map'或'filter'函數,它可以從您的數組中刪除有問題的元素 – jackwanders 2012-08-09 16:18:48

+0

@jackwanders:它們都不會從原始數組中刪除任何內容。它們都基於返回值創建一個新的Array。這可能是一個問題,如果有其他引用的原始依賴修改。 – 2012-08-09 16:20:08

+0

@amnotiam'arr = arr.filter(...)'或'arr = $ .map(arr,function(){...})'。只需將數組重新分配給函數的返回值即可。 – jackwanders 2012-08-09 16:24:53

回答

10

你可以使用本地.filter()功能:

var array = ["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]; 
array = array.filter(function(value) { 
    return value.indexOf('1') < 0; 
}); 

或與jQuery使用.grep()方法:

var array = $.grep(array, function(value) { 
    return value.indexOf('1') < 0; 
}); 
+0

'.filter'不會就地編輯數組。正如你的鏈接指出的那樣,它創建了一個新的數組,其元素通過測試函數 – jackwanders 2012-08-09 16:24:31

+0

@jackwanders,是的,你是對的。我已經更新了我的答案。 – 2012-08-09 16:25:08

4

你不需要jQuery來做到這一點 - 普通的JavaScript將會很好。代碼循環遍歷aArray,查看數組元素的第一個字符.substring,檢查它是否等於您指定的前綴(在本例中爲1),如果匹配,則使用.splice從數組中刪除該元素:

var aArray = ["1.A","1.B","1.C","1.D","2.B","2.C"]; 

var i = aArray.length; 
while(i--) { 
    if ((aArray[i].substring(0,1) == "1") { 
     var oRemoved = aArray.splice(i,1); 
    } 

} 
+0

這是實際修改原始數組的唯一答案,這似乎是OP所要求的。 – 2012-08-09 16:24:07

0

您可以使用jQuery的地圖()方法來做到這一點:

var filter = '1'; 
origArr = $.map(origArr, function (value, index) { 
    if($.inArray(filter, value) != 0) { 
     return value; 
    } 
}); 
0

你並不需要jQuery來做到這一點。

var data = ["1.A", "1.B", "1.C", "1.D", "2.A", "2.B"]; 

function removeElements(str) { 
    return data.filter(function(a) { 
     return (a.indexOf(str + ".") < 0); 
    }); 
} 

alert(removeElements(1)); 
alert(removeElements(2)); 
0

你似乎想要一個破壞性地修改原始數組的函數。這裏有一個:

Array.prototype.removeElementsWithPrefix = function(prefix) { 
    for (var i = this.length - 1; i >= 0; i--) { 
    if (this[i].indexOf(prefix) == 0) { 
     this.splice(i, 1); 
    } 
    } 
    return this; 
} 


var a = ["foo", "bar", "baz"]; 
a.removeElementsWithPrefix("b"); 
a; // => ["foo"] 

其實我不建議編碼這樣的破壞性功能然而,因爲一個函數,複製原始陣列更安全,更靈活。