Как достать значение индекс с помощью filter JS

У меня есть массив с числами, как мне достать оттуда индексы четных чисел с помощью filter() ?


Ответы (3 шт):

Автор решения: OPTIMUS PRIME

Функция, переданная в filter() получает такие параметры:

function( очередной_элемент, индекс, перебираемый_массив ) {...}

Можно в процессе перебора добавлять нужные индексы во второй массив, а уже потом присвоить этот массив исходной переменной. Но filter не совсем подходит для такой задачи, т.к. это уже обычный перебор.

Используйте reduce:

let arr = [2, 4, 6, 8, 9, 10];

arr = arr.reduce(function (acc, elem, index) {
  if( elem % 2 == 0 ) {
    acc.push(index);
  }
  
  return acc;
}, []);

console.log(arr);

>> Array.prototype.reduce()

P.s. «...но задача стоит именно в использовании filter...»

let arr = [2, 4, 6, 8, 9, 10];
let evenNumIndexes = [];

arr = arr.filter( (elem, index) => {
  let isEven = !(elem % 2);
   // isEven = (elem % 2 == 0); // в обоих случаях сразу cохраняем true/false

  if ( isEven ) evenNumIndexes.push(index);
  
  return isEven;
});

console.log( JSON.stringify( arr ) );
console.log( JSON.stringify( evenNumIndexes ) );

→ Ссылка
Автор решения: Vadim

Через filter:

const arr = [0, 1, 2, 3, 4, 4, 6]; // твой массив
const result = []; // создаем переменную

arr.filter((e, i)=>{
    if(e%2 === 0)result.push(i); // если кратно двум с остатком 0, пушим в результат
});

console.log(result); // выводим результат

Через современный for:

const arr = [0, 1, 2, 3, 4, 4, 6]; // твой массив
const result = []; // создаем переменную

for(let i in arr){
    if(arr[i]%2 === 0)result.push(+i); // если кратно двум с остатком 0, пушим в результат
}

console.log(result); // выводим результат

// через filter:
const arr = [0, 1, 2, 3, 4, 4, 6];
const result = [];
arr.filter((e, i)=>{
	if(e%2 === 0)result.push(i);
});
console.log(result);

// через for, я бы использовал этот код:
const arr2 = [0, 1, 2, 3, 4, 4, 6];
const result2 = [];
for(let i in arr2){
	if(arr2[i]%2 === 0)result2.push(+i);
}
console.log(result2);

→ Ссылка
Автор решения: Querta

Ответ уже есть, не могу писать комменты. Но есть небольшая неточность: в условии еще проводить проверку на число:

if (typeof elem == 'number' && elem % 2 == 0)

Иначе строки, содержащие числа так же будут считаться четными. [2, 6, 12, "22"], четные все кроме последнего

→ Ссылка