開始我有一個JavaScript陣列等jQuery的刪除數組元素如果元素值與指定的字符串
["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]
現在我想通過一個指定的字符串,以除去從這個數組元素。如果我指定了「1」,那麼它應該刪除所有的「1.A」,「1.B」,「1.C」,「1.D」....如何在jQuery中做到這一點。
開始我有一個JavaScript陣列等jQuery的刪除數組元素如果元素值與指定的字符串
["1.A","1.B","1.C","1.D",...,"2.A","2.B",...]
現在我想通過一個指定的字符串,以除去從這個數組元素。如果我指定了「1」,那麼它應該刪除所有的「1.A」,「1.B」,「1.C」,「1.D」....如何在jQuery中做到這一點。
你可以使用本地.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;
});
'.filter'不會就地編輯數組。正如你的鏈接指出的那樣,它創建了一個新的數組,其元素通過測試函數 – jackwanders 2012-08-09 16:24:31
@jackwanders,是的,你是對的。我已經更新了我的答案。 – 2012-08-09 16:25:08
你不需要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);
}
}
這是實際修改原始數組的唯一答案,這似乎是OP所要求的。 – 2012-08-09 16:24:07
您可以使用jQuery的地圖()方法來做到這一點:
var filter = '1';
origArr = $.map(origArr, function (value, index) {
if($.inArray(filter, value) != 0) {
return value;
}
});
你並不需要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));
你似乎想要一個破壞性地修改原始數組的函數。這裏有一個:
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"]
其實我不建議編碼這樣的破壞性功能然而,因爲一個函數,複製原始陣列更安全,更靈活。
如前所述,最簡單的解決方案是一個'map'或'filter'函數,它可以從您的數組中刪除有問題的元素 – jackwanders 2012-08-09 16:18:48
@jackwanders:它們都不會從原始數組中刪除任何內容。它們都基於返回值創建一個新的Array。這可能是一個問題,如果有其他引用的原始依賴修改。 – 2012-08-09 16:20:08
@amnotiam'arr = arr.filter(...)'或'arr = $ .map(arr,function(){...})'。只需將數組重新分配給函數的返回值即可。 – jackwanders 2012-08-09 16:24:53