我有这个简单的数组
var array = ['x.89999', 'y.sisisis', 'x.585858'];
我想删除数组中以' x开头的所有项目。'所以要返回这个数组:
['y.sisisis']
如何在不必循环或迭代整个阵列的情况下执行此操作? (我知道这可能是不可能的,所以不要介意,如果不可能的话)
我可以使用一些内置/本机代码吗?
谢谢
答案 0 :(得分:6)
您可以使用array.filter()
var newArray = array.filter(function(item){
return item.indexOf('x.') !== 1;
});
没有循环遍历整个数组就无法完成这项工作。 唯一的情况 - 数组按字母顺序排序。但排序要求循环过程
答案 1 :(得分:2)
假设要删除的项总是按字母顺序排在其他项之前(即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
值并且它正好在数组的末尾,这是不好的 - 你仍然需要迭代在整个阵列上。
答案 2 :(得分:1)
备用选项是使用正则表达式,类似这样。根据您的要求修复您的正则表达式。
var array = ['x.89999', 'y.sisisis', 'x.585858'];
var filtArr = array.filter(function(x){
return x.match("^[x].+$");
});
console.log(filtArr);
答案 3 :(得分:1)
一个不同的答案不使用显式迭代或Array.prototype.filter:
@Html.Widget("ebm_MenuManager_BackOffice")
当然,您需要注意分隔符。
好处是它适用于旧浏览器(ie8),而Array.prototype.filter则不适用。