Чанк массив в JavaScript, добавив только 1 элемент из следующего чанка - PullRequest
0 голосов
/ 26 октября 2018

Я хочу разделить мой массив в JavaScript на порцию 3. Но я хочу увеличить порцию только на 1 элемент. Пример ниже:

[1,2,3,4,5,6,7,8] => [1,2,3], [2,3,4], [3,4,5], [4,5,6], [5,6,7], [6,7,8]

Все полученные массивы должны иметь размер 3. Таким образом, только один элемент перемещается влево.

У меня есть следующий код, который делит массив на 3:

_.chunk($scope.substituteItems, 3);

Этот код делит массив как: [1,2,3,4,5,6,7,8] => [1,2,3], [3,4,5], [5,6,7], [8]

Очевидно, этот код делит массив только на равные куски, а это не то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

используя родной JS ... Если ваш массив из n элементов должен быть разбит на куски размером c последовательно, как вы описываете, будет n-c+1 всего кусков, в вашем случае 8-3+1=6, отобразите первые n-c+1 элементы массива на кусок, содержащий себя + следующие 2:

let c=3, arr=[1,2,3,4,5,6,7,8];
let result=arr.slice(0,arr.length-c+1).map((v,k)=>arr.slice(k,k+c));
console.log(result); 
0 голосов
/ 26 октября 2018

Вы можете использовать reduce() для циклического перемещения по массиву.Используйте slice() для поверхностного копирования массива в куски.

let arr = [1, 2, 3, 4, 5, 6, 7, 8];
let numOfChunk = 3;

let result = arr.reduce((c, v, i, a) => {
  if (i + numOfChunk <= a.length) c.push(a.slice(i, i + numOfChunk));
  return c;
}, [])


console.log(result);

Вы также можете использовать concat() вместо push(), если предпочитаете одну строку кода.

let arr = [1, 2, 3, 4, 5, 6, 7, 8];
let numOfChunk = 3;

let result = arr.reduce((c, v, i, a) => i + numOfChunk <= a.length ? c.concat([a.slice(i, i + numOfChunk)]) : c, [])

console.log(result);
...