2014-08-27 5 views
-1

У меня есть массив arr = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'], и я хочу получить каждое третье значение в новом arr2 = ['three', 'six', 'nine'].Получите каждое третье значение из массива

Я пробовал for цикл, но я не могу заставить его работать правильно. Каков наилучший способ сделать это с помощью jQuery или просто javascript?

+2

Ищут «по модулю оператора» – elclanrs

+4

Вы должны показать, что вы пытались таким образом мы можем помочь место, где вы пошло не так. –

+0

Возможный дубликат [как использовать ng-repeat с фильтром и $ index?] (Http://stackoverflow.com/questions/20858395/how-to-use-ng-repeat-with-filter-and-index) – Martin

ответ

6

Вы можете использовать функцию .grep

var arr2 = $.grep(arr, function(n, i) { 
    return i % 3 == 2; 
}); 

fiddle here

+0

Работает хорошо, спасибо! Мне нужно больше узнать о '$ .grep'. – Steve

+1

@Steve: '$ .grep' является' filter' в простой JS. Если вам не нужно поддерживать старые браузеры, используйте 'filter'. – elclanrs

+5

@Steve: Также обратите внимание, что использование '.grep' (или' filter') будет касаться каждого элемента вашего массива. Поскольку вы знаете, что вам нужен только каждый третий элемент, регулярный цикл 'for', который увеличивается на' 3', более эффективен (см. Ответ Джоша). Не то, чтобы это могло иметь большое значение только с 9 элементами. –

9

Вы можете использовать for цикл, если вы хотите!

Рассмотрим следующий пример:

var arr1 = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']; 
var arr2 = []; 

for (var i = 2; i < arr1.length; i += 3) { 
    arr2.push(arr1[i]); 
} 

arr2; // ["three", "six", "nine"] 
+0

Да же, как и мой андер, и я получаю -2 –

+4

@ bto.rdz Это потому, что ваш ответ _ не дает результата, запрошенного OP_. –

+2

@ bto.rdz: Это не тот же ответ. Даже если ваш ответ правильный, это все равно будет более эффективным. –

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