Javascript - 按值LIKE删除数组项

时间:2015-05-11 10:28:16

标签: javascript arrays

我有这个简单的数组

var array = ['x.89999', 'y.sisisis', 'x.585858'];

我想删除数组中以' x开头的所有项目。'所以要返回这个数组:

['y.sisisis']

如何在不必循环或迭代整个阵列的情况下执行此操作? (我知道这可能是不可能的,所以不要介意,如果不可能的话)

我可以使用一些内置/本机代码吗?

谢谢

4 个答案:

答案 0 :(得分:6)

您可以使用array.filter()

var newArray = array.filter(function(item){
    return item.indexOf('x.') !== 1;
});

没有循环遍历整个数组就无法完成这项工作。 唯一的情况 - 数组按字母顺序排序。但排序要求循环过程

答案 1 :(得分:2)

假设要删除的项总是按字母顺序排在其他项之前(即xy之前),您可以对数组进行排序,然后打破循环一旦找到非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"

DEMO

当然,正如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则不适用。