Znajdź i zwróć pozycje tablicy o wielu wartościach w minimalnych przebiegach

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

Jak wyszukiwać wiele pozycji i zwracać pozycje szybciej i efektywniej w krótszym czasie?

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

//should return 0 2 3 5 6
0
Code Guy 1 grudzień 2018, 17:55

1 odpowiedź

Najlepsza odpowiedź

Potrzebujesz innego podejścia, ponieważ musisz szukać więcej niż jednej wartości.

Możesz zmapować indeksy dla pasujących przedmiotów lub wziąć -1 za nieznalezione przedmioty do późniejszego filtrowania.

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);
2
Nina Scholz 1 grudzień 2018, 18:11