我有這個簡單的數組使用Javascript - 通過值刪除陣列的項目,如
var array = ['x.89999', 'y.sisisis', 'x.585858'];
我想刪除通過啓動陣列中的所有項目「X」。所以要返回這個數組:
['y.sisisis']
我該怎麼做,而不必循環或迭代所有整個數組? (我知道這可能是不可能的所以不介意,如果不可能的話)
是否有一些內置/本機代碼,我可以使用?
感謝
我有這個簡單的數組使用Javascript - 通過值刪除陣列的項目,如
var array = ['x.89999', 'y.sisisis', 'x.585858'];
我想刪除通過啓動陣列中的所有項目「X」。所以要返回這個數組:
['y.sisisis']
我該怎麼做,而不必循環或迭代所有整個數組? (我知道這可能是不可能的所以不介意,如果不可能的話)
是否有一些內置/本機代碼,我可以使用?
感謝
您可以使用array.filter()
var newArray = array.filter(function(item){
return item.indexOf('x.') !== 1;
});
沒有辦法做這個工作,而無需通過整個數組循環。 唯一的情況 - 數組按字母順序排序。但分揀需求循環通過太
這會遍歷整個集合。 –
嘿,閱讀下面的代碼文本,我提到那 –
它仍然不正確。根據數據來自何處以及數據是否隨後添加,您不必遍歷所有內容。 –
假設刪除的項目將總是按字母順序先於其他項目(即x
是y
之前),您可以排序的數組,然後儘快打破環路非x值已經發現:
function filter(arr) {
arr.sort();
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i][0] !== 'x') {
break;
}
}
return arr.slice(i);
}
filter(arr); // logs: "Iterated to 5 of array length 9"
當然,作爲JazzCat提到,這是沒有好,如果你只有一個y
值,並將其在數組的結尾是正確的 - 你還在將不得不迭代整個數組。
cooool很多cooool ................ – sbaaaang
備用選項是使用正則表達式,就像這樣。根據您的要求修正您的正則表達式。不使用顯式迭代或Array.prototype.filter
var array = ['x.89999', 'y.sisisis', 'x.585858'];
var filtArr = array.filter(function(x){
return x.match("^[x].+$");
});
console.log(filtArr);
一個不同的答案:
var array = ['x.89999', 'y.sisisis', 'x.585858'];
array = array.join("#").replace(/(#?x\.\w*)/g,"").replace(/^#/,"").split("#");
//["y.sisisis"]
當然,你將需要採取的分隔符的照顧。
好的一點是,它可以在舊的瀏覽器(ie8)上工作,而Array.prototype.filter不會。
您可以使用'.filter()',但它仍然在內部循環。 – Scimonster
使用正則表達式是顯而易見的,也許是唯一的答案,但是你必須遍歷數組中的元素來做到這一點。或者使用'.filter',但是它也會遍歷數組。 –
如果確保列表總是已排序,則只需迭代它,直到遇到不以x開頭的第一個字符串。 –