Разделить массив на подмассивы [0,1,2,3,4,5,6,7,8,9] -> [[0,1],[2,3,4],[5,6], [7,8,9]]?

102
11 октября 2021, 07:30

Имеется массив [0,1,2,3,4,5,6,7,8,9]

в итоге нужно разбить на подмассивы [[0,1],[2,3,4],[5,6], [7,8,9]]

Метод ниже разделяет исходный массив на подмассивы такого вида [[0,1],[2,3],[4,5],[6,7],[8,9]]

   let arrayIndex = -1;
    const newArr = [0,1,2,3,4,5,6,7,8,9].reduce((final, curr, i) => {
      if (i%2 === 0) {
        final.push([curr])
        arrayIndex++;
      } else {
        final[arrayIndex].push(curr);
      }
      return final;
    }, []);

Как доработать метод, чтобы добиться ожидаемого результата?

Answer 1

let arrayIndex = -1; 
 
const newArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].reduce((final, curr, i) => { 
  if (i % 5 === 0 || i % 5 === 2) { 
    final.push([curr]) 
    arrayIndex++; 
  } else { 
    final[arrayIndex].push(curr); 
  } 
  return final; 
}, []); 
 
console.log(newArr);

Answer 2

Условия по сохранению целостности оригинального массива нет, если есть - можно скопировать массив перед сплайсами, а так - вот:

let arr = [0,1,2,3,4,5,6,7,8,9]; 
let result = []; 
while (arr.length)  
  result.push(arr.splice(0, 2), arr.splice(0, 3)) 
console.log(JSON.stringify(result));

Или так:

let arr = [0,1,2,3,4,5,6,7,8,9]; 
let result = [2,3,2,3].map(i => arr.splice(0, i)); 
console.log(JSON.stringify(result));

PS: это конечно не универсально

Answer 3

Для произвольного набора длин подмассивов

const array = [0,1,2,3,4,5,6,7,8,9,10], 
      chunk = [2,3],  
      al = array.length, cl = chunk.length; 
var   ic = 0, 
      newArr = [], 
      i = 0; 
while(i < al) { 
    // перебираем по кругу массив длин (chunck) 
    // и вырезаем подмассив с текущего индекса нужной длины методом slice   
    newArr.push(array.slice(i,i+chunk[ic])); 
    i += chunk[ic]; 
    ic = (ic+1) % cl; 
} 
console.log(newArr)

READ ALSO
Убрать двойной клик по Dropdown в Navbar, Bootstrap 4.3

Убрать двойной клик по Dropdown в Navbar, Bootstrap 4.3

У меня на сайте возникла проблема с кликами по ссылке DropdownЭта проблема возникла при подключении библиотеки отвечающую за вывод Tooltip-ов

305
Как откорректировать работу JS-скрипта?

Как откорректировать работу JS-скрипта?

Есть JS-скрипт, который выполняет следующую функцию: когда пользователь делает активными 3 чекбокса, пользователя перебрасывает на страницу...

177
Как декодировать cобранный webpack?

Как декодировать cобранный webpack?

У меня имеется собранный webpack и source map к немуЕсть ли возможность на основе моих файлов получить исходные? Если да, то каким образом?

107
Проблема с Slider Revolution

Проблема с Slider Revolution

При применении фильтров на товары Woocommerce происходит ошибка слайдераПосле того, как применяется один из фильтров на товары на странице магазина...

331