2016-12-24 14 views
8

Bir dizim var ve yalnızca her üçüncü öğeyi yeni bir dizi olarak (0'dan başlayarak) döndürmek istiyorum. ÖrneğinBir dizinin her 3 öğesinin nasıl çekileceği

:

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

Bu şu anda bu şekilde yapıyorum edilir:

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

arr.map ile bunu yapmanın bir yolu var mı? Bunu yapmanın daha kolay bir yolu var mı?

+0

'.map()' iyi bir seçim olmaz çünkü 1 eşleme için 1 döndürmek üzere tasarlanmıştır. Ancak '.reduce()' kullanabilirsiniz. – Pointy

+0

@Pointy Neden özünde bir filtre olduğunu azaltmak için kullanabilir miyim? –

+0

@torazaburo emin, bu doğru. Ben genellikle "filtre" listesindeki değerlerin içsel doğası ile bir ilgisi olduğunu düşünüyorum, ama bu sadece benim problemim sanırım :) – Pointy

cevap

11

Sen alternatif olarak döngü temel kullanarak, bu bir filter ile

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

yapmak Ama unutmayın bazı bağlamlarda diğerlerinden daha biraz daha verimlidir.

+0

'' 'ifadesinde' _' kastediyor '(_, i)'? – StepUp

+1

@StepUp Bu sadece kullanılmamış bir argüman, bu yüzden orada bir alt çizgi kullandık. Bunun içinde özel bir anlamı yok. –