Задать вопрос
@gabejonson
Верстальщик с намеком на Front

Как сделать массив по 4 элемента из массива с 48ю элементами?

Добрый день!
Возник вопрос:
Как из массива
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48]

сделать массив:
[[1,2,3,4],[5,6,7,8],[9.10,11,12].[13,14,15,16],[17,18,19,20]...]


Заранее претмного благодарен
  • Вопрос задан
  • 299 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Сделаем функцию, которая нарезает массив на куски указанного размера:

const getChunks = (arr, chunkSize) =>
  Array.from(
    { length: Math.ceil(arr.length / chunkSize) },
    (n, i) => arr.slice(i * chunkSize, (i + 1) * chunkSize)
  );

// или

const getChunks = (arr, chunkSize) =>
  arr.reduce((acc, n, i) => (
    i = i / chunkSize | 0,
    (acc[i] = acc[i] || []).push(n),
    acc
  ), []);

// или

const getChunks = (arr, chunkSize) =>
  arr.reduce((acc, n, i) => (
    (i % chunkSize) || acc.push([]),
    acc[acc.length - 1].push(n),
    acc
  ), []);

Ну и воспользуемся ею:

const arr = [...Array(50).keys()];
const chunks = getChunks(arr, 7);
Ответ написан
groog
@groog
Я только учусь
Исходные данные
var a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49];
var n = 4;
var result;


Вариант, если последний элемент может быть любого размера
result = Array(Math.ceil(a.length / 4)).fill(0).map( (v, i) => a.slice(i*n, (i+1)*n) );


Вариант, если последний элемент должен быть фиксированного размера
result = Array(Math.ceil(a.length / 4)).fill(0).map( (v, i, array) => ( l = a.slice(i*n, (i+1)*n) ).concat( Array( Math.max(0, n - l.length) ).fill(0) ) );


Попробовать на JSFiddle
Ответ написан
Комментировать
@cppjunkie
По-поему так проще всего

var a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49];
var b = [];
for (var i = 0; i < a.length; i += 4) {
  b.push(a.slice(i, i + 4));
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@La1serg
Мб вот так (не тестил)

let result = [];

for (let i = 0, j = 3; j < array.length; i += 4, j += 4) {
    result.push(array.slice(i, j));
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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