Чанк массив в JavaScript, добавив только 1 элемент из следующего чанка

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]

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

Теги:
arrays
chunks

2 ответа

2

используя собственный 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
    Также код должен быть совместим с IE. IE не поддерживает команду let.
  • 0
    просто используйте var вместо let, и он должен работать точно так же
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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню