是数组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页面上有一个例子,它有一些等效的代码。 我不是一个粉丝,因为重复的增加,但它更短,这是很好的。
下一篇: Is there a Better Way to Search a JavaScript Array than Using jQuery's each?