2016-12-24 2 views
8

У меня есть массив и хочу возвращать только каждый третий элемент в виде нового массива (начиная с 0).Как принять каждый третий элемент массива

Например:

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
let newArr = [1, 4, 7]; 

Это так, как я сейчас делаю это:

let newArr = []; 
for(let x = 0; x < arr.length; x += 3) { 
    newArr.push(arr[x]); 
} 
return newArr; 

Есть ли способ сделать это с arr.map? Есть ли более простой способ сделать это?

+0

'.map()' не будет хорошим выбором, потому что он предназначен для возврата отображения 1 для 1. Однако вы можете использовать '.reduce()'. – Pointy

+0

@Pointy Почему я должен использовать сокращение для того, что по сути является фильтром? –

+0

@torazaburo уверен, это правда. Обычно я думаю о том, что «фильтр» имеет какое-то отношение к внутреннему характеру значений в списке, но это, я думаю, только моя проблема :) – Pointy

ответ

11

Вы можете альтернативно сделать это с filter,

let newArr = arr.filter((_,i) => i % 3 == 0); 

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

+0

Что означает '_' в выражении' (_, i) '? – StepUp

+1

@StepUp Это просто неиспользуемый аргумент, поэтому мы использовали там знак подчеркивания. В этом нет особого значения. –

Смежные вопросы