我有一个字符串数组
const arr = ['some', 'word', 'anotherverylongword', 'word', 'yyy', 'u']
const joined = arr.join(';')
我想获取连接字符串长度不大于 10 的 block 数组
例如输出将是:
[
['some;word'], // joined string length not greater than 10
['anotherverylongword'], // string length greater than 10, so is separated
['word;yyy;u'] // joined string length is 10
]
最佳答案
您可以使用 reduce
(用一些 spread syntax
和 slice
)生成这样的 block :
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);
想法是通过从 arr
的第一个元素(reduce
函数的第二个参数)开始,用 block (result
) 构建数组),然后,对于 arr
(arr.slice(1)
) 的每个剩余元素,检查它是否可以附加到累加器(acc
)。累加器最终成为 reduce
的最终返回值,分配给 result
。
关于javascript - 如何将带分隔符的连接数组拆分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60353704/