我有字符串数组
const arr = ['some', 'word', 'anotherverylongword', 'word', 'yyy', 'u']
const joined = arr.join(';')
我想要获取块数组,其中连接的字符串长度不大于 10
例如输出将是:
[
['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 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce(和一些spread syntax https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax and slice https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)