@kirillleogky

Как работает функция разбивки массива на части?

Есть функция разбивки массива на части:

function changeArr (arr, chunks) {
  return arr.reduce((acc, n, i) => ((acc[i % chunks] = acc[i % chunks] || []).push(n), acc), []);
}
changeArr([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 3);


Не могу понять что делает и для чего это в коде(выделено):
return arr.reduce((acc, n, i) => ((acc[i % chunks] = acc[i % chunks] || []).push(n), acc), []);
  • Вопрос задан
  • 67 просмотров
Решения вопроса 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Для return

Почитайте как работает запятая в JS

var func = () => ('foo', 'bar')

func() // 'bar'
Ответ написан
Комментировать
Seasle
@Seasle Куратор тега JavaScript
reduce обрабатывает массив (почти как map), причем, вторым аргументов передается аккумулятор (acc), или то, куда будем складывать. Итак: на каждой итерации у нас есть индекс текущего элемента, и количество частей. Благодаря mod оператору (i % chunks), мы получаем индекс «части». Далее, (acc[i % chunks] = acc[i % chunks] || []) эта часть позволяет создавать пустой массив, если по текущей «части» ничего нет. А если не понятно, почему стоит , acc, то можно функцию представить в другом виде:
arr.reduce((acc, n, i) => {
    (acc[i % chunks] = acc[i % chunks] || []).push(n);
    /* Или
        if (!acc[i % chunks]) {
            acc[i % chunks] = [];
        }
        acc[i % chunks].push(n);
     */
    return acc;
}, []);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы