Вы можете использовать reduce
(с некоторыми spread syntax
и slice
) для генерации таких кусков:
const arr = ['some', 'word', 'anotherverylongword', 'word', 'yyy', 'u'];
const chunkSize = 10;
const result = arr.slice(1).reduce(
(acc, cur) =>
acc[acc.length - 1].length + cur.length + 1 > chunkSize
? [...acc, cur]
: [...acc.slice(0, -1), `${acc[acc.length - 1]};${cur}`],
[arr[0]]
);
console.log(result);
Идея состоит в построении массива с кусками (result
), начиная с первого элемента с arr
(второй параметр - reduce
функция), и затем для каждого из оставшихся элементов arr
(arr.slice(1)
) проверяем, можно ли его добавить к последнему элементу аккумулятора (acc
). В конечном итоге аккумулятор становится окончательным возвращаемым значением reduce
, присвоенным result
.