Как достать значение индекс с помощью filter JS
У меня есть массив с числами, как мне достать оттуда индексы четных чисел с помощью filter() ?
Ответы (3 шт):
Функция, переданная в 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);
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 ) );
Через 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);
Ответ уже есть, не могу писать комменты. Но есть небольшая неточность: в условии еще проводить проверку на число:
if (typeof elem == 'number' && elem % 2 == 0)
Иначе строки, содержащие числа так же будут считаться четными. [2, 6, 12, "22"], четные все кроме последнего