Массив фрагментов в javascript, добавив только 1 элемент из следующего фрагмента

Я хочу разделить свой массив в 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]

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

1
0
919
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать 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);

используя собственный 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); 

Также код должен быть совместим с IE. IE не поддерживает команду let.

Arun Kumar 26.10.2018 05:41

просто используйте var вместо let, и он должен работать точно так же

chiliNUT 26.10.2018 05:42

Другие вопросы по теме