我有一个包含多个相同值的数组
["test234", "test9495", "test234", "test93992", "test234"]
这里我想获取数组中每个test234
的索引
为此,我尝试了Array.原型. indexOf()
方法。但它只返回我0
,但我希望它返回我[0,2,4]
。
我该怎么做?
var array = ["test234", "test9495", "test234", "test93992", "test234"];
document.write(array.indexOf("test234"));
只需使其成为一个for循环来检查每个数组元素。
var array = ["test234", "test9495", "test234", "test93992", "test234"];
for (i=0;i<array.length;i++) {
if (array[i] == "test234") {
document.write(i + "<br>");
}
}
这种函数不存在内置的,但自己制作会很容易。值得庆幸的是,indexOf
也可以接受起始索引作为第二个参数。
function indexOfAll(array, searchItem) {
var i = array.indexOf(searchItem),
indexes = [];
while (i !== -1) {
indexes.push(i);
i = array.indexOf(searchItem, ++i);
}
return indexes;
}
var array = ["test234", "test9495", "test234", "test93992", "test234"];
document.write(JSON.stringify(indexOfAll(array, "test234")));
您可以使用duce:
const indexesOf = (arr, item) =>
arr.reduce(
(acc, v, i) => (v === item && acc.push(i), acc),
[]);
所以:
const array = ["test234", "test9495", "test234", "test93992", "test234"];
console.log(indexesOf(array, "test234")); // [0, 2, 4]
另一种方法可能是使用迭代器:
function* finder(array, item) {
let index = -1;
while ((index = array.indexOf(item, index + 1)) > -1) {
yield index;
}
return -1;
}
这让您可以灵活地以懒惰的方式进行搜索,您只能在需要时进行搜索:
let findTest234 = finder(array, "test234");
console.log(findTest234.next()) // {value: 0, done: false}
console.log(findTest234.next()) // {value: 2, done: false}
console.log(findTest234.next()) // {value: 4, done: false}
console.log(findTest234.next()) // {value: -1, done: true}
当然,您始终可以在循环中使用它(因为它是迭代器):
let indexes = finder(array, "test234");
for (let index of indexes) {
console.log(index);
}
并立即使用迭代器以生成数组:
let indexes = [...finder(array, "test234")];
console.log(indexes); // [0, 2, 4]
希望有帮助。