javascript - 在最少的运行中有效地查找并返回多个值的数组位置

标签 javascript arrays search arraylist

在最少的运行中查找并返回多个值的数组位置

function getAllIndexes(arr, val) {
    var indexes = [], i = -1;
    while ((i = arr.indexOf(val, i+1)) != -1){
        indexes.push(i);
    }
    return indexes;
}

var Cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"];

var indexes = getAllIndexes(Cars, "Nano");

//will return 0 3 5

如何搜索多个项目并在更短的时间内更快、更高效地返回位置

var indexes = getAllIndexes(Cars, ["Nano","BMW"]);

//should return 0 2 3 5 6

最佳答案

您需要一种不同的方法,因为您有多个值需要寻找。

您可以映射匹配项目的索引,或对未找到的项目采用 -1 以便稍后进行过滤运行。

const
    getAllIndices = (array, needles) => array
        .map((v, i) => needles.includes(v) ? i : -1)
        .filter(i => i + 1);

var cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"],
    indices = getAllIndices(cars, ["Nano", "BMW"]);

console.log(indices);

ES5

function getAllIndices(array, needles) {
    return array
        .map(function (v, i) { return needles.indexOf(v) + 1 ? i : -1; })
        .filter(function (i) { return i + 1; });
}

var cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"],
    indices = getAllIndices(cars, ["Nano", "BMW"]);

console.log(indices);

关于javascript - 在最少的运行中有效地查找并返回多个值的数组位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571991/

相关文章:

javascript - 鼠标悬停或单击时功能无法正常工作

javascript - 无法从指令模板访问范围

javascript - ExtJs添加新记录时删除现有记录

arrays - 为什么 VarType() 总是为数组返回 8204

c - 为什么在c中初始化n维数组时必须显式指定n-1维

javascript - 如何在 ember (live) 中刷新模板?

python - 搜索文件中的匹配项,如果不存在则转到下一个文件

Python - 与字典搜索相反

java - Realm 数据库中的搜索操作速度

c - strcpy() 不适用于某些字符串,但不适用于其他字符串