我有这个简单的数组使用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开头的第一个字符串。 –