Javascript-按值删除数组项,如

Javascript-按值删除数组项,如,javascript,arrays,Javascript,Arrays,我有一个简单的数组 var array = ['x.89999', 'y.sisisis', 'x.585858']; 我要删除数组中以“x”开头的所有项,因此要返回此数组: ['y.sisisis'] 如何在不必循环或迭代整个数组的情况下执行此操作?我知道这可能是不可能的,所以如果不可能,请不要介意 是否有一些内置/本机代码可以使用 谢谢您可以使用array.filter 如果不在整个阵列中循环,就无法完成此任务。 唯一的情况是数组按字母顺序排序。但是排序也需要循环进行假设要删除的项目总是

我有一个简单的数组

var array = ['x.89999', 'y.sisisis', 'x.585858'];
我要删除数组中以“x”开头的所有项,因此要返回此数组:

['y.sisisis']
如何在不必循环或迭代整个数组的情况下执行此操作?我知道这可能是不可能的,所以如果不可能,请不要介意

是否有一些内置/本机代码可以使用

谢谢

您可以使用array.filter

如果不在整个阵列中循环,就无法完成此任务。
唯一的情况是数组按字母顺序排序。但是排序也需要循环进行

假设要删除的项目总是按字母顺序在其他项目之前,即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值,并且它正好位于数组的末尾,那么这是不好的-您仍然需要迭代整个数组。

另一种选择是使用正则表达式,类似这样的。根据您的要求修复您的正则表达式

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

var filtArr = array.filter(function(x){
    return x.match("^[x].+$");
});

console.log(filtArr);

不使用显式迭代或Array.prototype.filter的一个不同答案:

var array = ['x.89999', 'y.sisisis', 'x.585858'];
array = array.join("#").replace(/(#?x\.\w*)/g,"").replace(/^#/,"").split("#");
//["y.sisisis"]
当然,您需要注意分隔符字符


好的一点是,它可以在旧浏览器ie8上工作,而Array.prototype.filter不能。您可以使用.filter,但它仍然在内部循环。使用正则表达式是显而易见的,可能是唯一的答案,但您必须迭代数组中的元素才能做到这一点。或者使用.filter,但它也会在数组中进行迭代。如果您确保列表始终排序,则只需迭代它,直到遇到第一个不以x开头的字符串。请查看以前的帖子抱歉,我发布了一个错误的链接,这可能有助于您解决整个集合中的循环问题。嘿,请阅读代码下面的文本,我提到它仍然不正确。根据数据的来源和之后添加的数据,您不必对所有内容进行循环。我再等一会儿,也许有人会发布其他解决方案,atm非常感谢@katerinatorcoool非常coool。。。。。。。。。。。。。。。。
var array = ['x.89999', 'y.sisisis', 'x.585858'];
array = array.join("#").replace(/(#?x\.\w*)/g,"").replace(/^#/,"").split("#");
//["y.sisisis"]