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;
}, []);