Задать вопрос
@bozuriciyu

Как эффективно выбирать каждый n элемент массива?

Как быстро и эффективно выбирать какждый 5, 10, 12 и тд элемент в массиве? Массив из строк, объектов, чего угодно.
  • Вопрос задан
  • 6388 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
«Эффективно» в смысле кратко, в одну строку:
const everyNth = (arr, n) => arr.filter((e, i) => i % n === 0);

// применение
everyNth([0, 11, 22, 33, 44, 55, 66, 77], 7) // [0, 77]


«Эффективно» без лишних итераций, старым добрым циклом for():
function everyNth(arr, n) {
  const result = [];
  for (let i=0; i<arr.length; i+=n) result.push(arr[n]);
  return result;
}


Какой быстрее – сделал проверку на jsPerf
Цикл for()быстрее в 7 раз!
скрин
5dffbba9538a7281867384.png
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Эффективно - только через создание второго индексного массива. При этом, очевидно, проигрыш по оперативной памяти, но не архи большой. Объекты передаются по ссылке, и строки примерно до 12 символов - тоже по ссылке.
var arr = [1,2,3,4,5,6,7,8,9,10,11,12]; //Исходный массив
//Формируем вспомогательный индексный массив
var i = 0;
var every_5 = arr.filter(e => (++i) % 5 === 0); 
//Проверяем
every_5[0]; //Пятый элемент
every_5[1]; //Десятый элемент
Ответ написан
@dimoff66
Кратко о себе: Я есть
Минимум телодвижений, только нужные элементы без перебора всего массива
const getEvery = (arr, gap) => Array.from(
   { length: Math.floor(arr.length / gap)},
   (_, i) => arr[i * gap + gap - 1] )

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log(getEvery(arr, 3))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Karpion
Я ничего не понял. Откуда берётся список номеров?

Ну, можно обычный цикл for - но вместо i++ написать i+=5, тогда будет каждый пятый элемент.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы