EcmaScript6 метод findIndex, он может возвращать несколько значений? - PullRequest
0 голосов
/ 03 июля 2018

Во время изучения ES6 я пытался найти индекс нескольких элементов в массиве, но я только что получил индекс первого элемента, который соответствует моему условию или функции обратного вызова.

Пример: У меня есть массив с возрастами, и я хочу, чтобы индекс всех возрастов превышал или равнялся 18.

let ages = [12,15, 18, 17, 21];
console.log(`Over 18: ${ages.findIndex(item => item >= 18)}`);
// output that i'm looking: [2,4]
// output that is coming: 2

Итак, я хочу понять, если метод Array.prototype.findIndex() просто возвращает один индекс первого элемента, который соответствует, или -1, если какой-либо элемент удовлетворяет условию. И как мы можем сделать это с помощью ES6?


Спасибо

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Просто используйте Array.reduce() и создайте массив индексов всех возрастов больше 18.

let ages = [12,15, 18, 17, 21];
var result = ages.reduce((a,curr,index)=>{
  if(curr >= 18)
    a.push(index);
  return a;
},[]);
console.log(result);
0 голосов
/ 03 июля 2018

Вы можете использовать .map() метод здесь, например:

let ages = [12, 15, 18, 17, 21];
let indexes = ages.map((elm, idx) => elm >= 18 ? idx : '').filter(String);
console.log( indexes );

Синтаксис метода .map() выглядит следующим образом:

var new_array = arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array
}[, thisArg])

где мы можем использовать currentValue и index для нашего требования.

И универсальная функция для него может быть такой:

const ages = [12, 15, 18, 17, 21];
const getAllIndexes = (arr, val) => {
  return arr.map((elm, idx) => elm >= val ? idx : '').filter(String);
}

console.log(getAllIndexes(ages, 18));
console.log(getAllIndexes(ages, 17));
0 голосов
/ 03 июля 2018

Метод findIndex () возвращает индекс элемента first в массив, который удовлетворяет предоставленной функции тестирования. В противном случае -1 вернулся.

Одна опция использует вместо reduce. Используйте concat, чтобы добавить индекс к аккумулятору, если число больше или равно 18

let ages = [12, 15, 18, 17, 21];

let result = ages.reduce((c, v, i) => v >= 18 ? c.concat(i) : c, []);

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...