是数组js中的元素

在一个老问题之后,我仍然有一个问题:

a = ["apple", "banana", "orange", "apple"];

a.indexOf("apple") = 0

在数组中找到“apple”元素的BOTH索引的最简单方法是什么? 我想一次删除它们 - 有可能吗?


这是筛选方法的任务:

var noApples = a.filter(function(el) { return el != "apple"; })

在数组中找到“apple”元素的BOTH索引的最简单方法是什么?

你问了,但也询问了删除。 我将首先处理索引,然后删除。

索引:

没有捷径,你必须循环。 你可以使用一个简单的for循环:

var indexes = [];
var index;

for (index = 0; index < a.length; ++index) {
    if (a[n] === "apple") {
        indexes.push(index);
    }
});

或者两个ES5选项: forEach

var indexes = [];
a.forEach(function(entry, index) {
    if (entry === "apple") {
        indexes.push(index);
    }
});

或者reduce

var indexes = a.reduce(function(acc, entry, index) {
    if (entry === "apple") {
        acc.push(index);
    }
    return acc;
}, []);

...虽然坦言简化版,真正给你买了东西forEach

删除:

从你的问题结束:

我想一次删除它们 - 有可能吗?

有点。 在ES5中,可以使用一个filter函数,但它会创建一个新的数组。

var newa = a.filter(function(entry) {
    return entry !== "apple";
});

基本上这样做(一般而言):

var newa = [];
var index;

for (index = 0; index < a.length; ++index) {
    if (a[n] !== "apple") {
        newa.push(index);
    }
});

Array.indexOf接受第二个可选参数:从开始的索引。 你可以在循环中使用它来指定从最后一个开始。

var indices = [],
    index = 0;

while (true) {
    index = a.indexOf("apple", index);
    if (index < 0) {
        break;
    }
    indices.push(index);
}

一旦indexOf返回-1 ,表示“找不到元素”,循环将会中断。 indices数组将保存正确的索引。

indexOf上的Mozilla页面上有一个例子,它有一些等效的代码。 我不是一个粉丝,因为重复的增加,但它更短,这是很好的。

链接地址: http://www.djcxy.com/p/74953.html

上一篇: Is element in array js

下一篇: Is there a Better Way to Search a JavaScript Array than Using jQuery's each?