в учебных целях я хочу получить каждый второй элемент массива. Мне удалось выполнить цикл for:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function filterEverySecond(arr) {
let everySecondEl = [];
for (let i = 0; i < arr.length; i += 2) {
everySecondEl.push(arr[i]);
}
return everySecondEl;
}
console.info({
numbers,
result: filterEverySecond(numbers)
});Теперь я хочу добиться того же без цикла for, но с помощью методов массива (forEach, filter, map или reduce). Может ли кто-нибудь порекомендовать, какой метод будет лучше здесь?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вы можете сделать это легко с filter
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const filtered = numbers.filter((_, i) => i % 2 === 0)
console.info(filtered)вы просто отфильтровываете элементы с нечетным индексом
Вы можете использовать filter и проверить, делится ли индекс текущего элемента массива на 2:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.info({
numbers,
result: numbers.filter((_, index) => index % 2 === 0)
});Вы можете использовать для каждого цикла так, чтобы получить тот же желаемый результат:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const result = [];
numbers.forEach(number => {
if (number % 2 != 0) {
result.push(number);
}
});
console.info(numbers);
console.info(result);Оператор модуля возвращает остаток двух чисел при делении. Например: 1 % 2 вернет 1 в качестве остатка. Итак, в операторе if мы проверяем, не делится ли число на 2.
Привет! Ваш ответ кажется неправильным, автору вопроса нужен результат: [ 1, 3, 5, 7, 9 ] а не ваш, исправьте код, прежде чем вы получите больше отрицательных голосов.
Спасибо, что указали на это, простое решение!
Вы можете использовать фильтр для index.
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.info({
numbers,
result: numbers.filter((n,i)=>i%2==0)
});
Теперь это выглядит так очевидно... Большое спасибо!