2016-12-24 11 views
8

Mam tablicę i chcę zwrócić tylko co trzeci element jako nową tablicę (od 0).Jak zrobić co trzeci element tablicy

Na przykład:

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

ten sposób jestem obecnie to robi:

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

Czy istnieje sposób to zrobić z arr.map? Czy istnieje prostszy sposób na zrobienie tego?

+0

'.map()' nie byłby dobrym wyborem, ponieważ jest przeznaczony do zwracania mapowania 1 na 1. Można jednak użyć '.reduce()'. – Pointy

+0

@Pointy Dlaczego miałbym używać zmniejszenia dla tego, co jest w istocie filtrem? –

+0

@torazaburo pewnie, to prawda. Zazwyczaj myślę o "filtrze" mającym coś wspólnego z wewnętrzną naturą wartości na liście, ale to chyba tylko mój problem :) – Pointy

Odpowiedz

11

alternatywnie można to zrobić z filter,

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

jednak pamiętać, stosując podstawowe dla pętli jest nieco bardziej wydajny niż inne w niektórych kontekstach.

+0

co oznacza wyrażenie "_" w wyrażeniu '(_, i)'? – StepUp

+1

@StepUp To jest tylko nieużywany argument, dlatego użyliśmy tam podkreślenia. Nie ma w tym specjalnego znaczenia. –