Я пытаюсь преобразовать массив в массивы равного размера длиной n , однако количество массивов не может превышать размер o .если массив не может быть разбит на длину n без превышения o массива массивов, то n может увеличиться, чтобы приспособиться к уменьшению количества массивов массивов до о .Любые массивы не n должны быть смещены в начало массива массивов.при желании каждый элемент должен быть в состоянии объединяться
Примечание: я использую числа для визуализации вопроса, но элементы являются объектами.
например: круглые скобки массива примечания: {}, [], () в этих примерах для упрощения визуализации
var arr = [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5], n = 2, o = 15
var shouldOutput = [{0,1},{2,3},{4,5},{6,7},{8,9},{0,1},{2,3},{4,5}]
arr = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5], n = 2, o = 15
var shouldOutput = [{1},{2,3},{4,5},{6,7},{8,9},{0,1},{2,3},{4,5}]
var arr = [01,23,45,67,89,01,23,45,67,89,01,23,45,67,89,01,23], n = 2, o = 15, concatenate = true
var shouldOutput = [({01})({2345})({6789})({0123})({4567})({8901})({2345})({6789})({0123})]
до сих пор у меня есть следующий код, который будет корректно генерировать массив массивов с длиной n и правильно выталкивает все остальные элементы вначало массива, но я не уверен, как перейти к ограничению длины массива массивов до o длины.
let getArrChunks = function (arr, n, o, joinStr) {
let ret = [];
let max = Math.floor(arr.length / n);
if ((arr.length % n) > 0) max++;
for (let i = arr.length - n; i > -n; i -= n) {
ret[(max--)-1] = joinStr === undefined ? arr.splice(i, n) : arr.splice(i, n).join(joinStr);
}
return ret;
};