如何在JavaScript中将数组拆分为3个不等长的子数组?
问题
假设有如下数组:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
我希望将其拆分为3个数组:前X个元素组成第一个数组,最后X个元素组成第三个数组,剩余元素组成第二个数组,示例如下:
#1 - [0, 1, 2] #2 - [3, 4, 5, 6, 7, 8, 9, 10, 11, 12] #3 - [13, 14, 15]
请问有没有比以下代码更简洁高效的实现方式?
现有实现代码:
const splitBy = 3; const originalArray = Array.from(Array(16).keys()); const result = [ originalArray.slice(0, splitBy), originalArray.slice(splitBy, -splitBy), originalArray.slice(-splitBy), ]; console.log(result)
回答
你的现有代码已经是兼顾简洁、高效和可读性的最优方案之一了——slice本身是数组高效提取操作,写法清晰易懂。如果非要追求更紧凑的形式,只能在变量命名或语法上做简化,但核心逻辑和效率不会有变化,比如:
const splitBy = 3; const arr = Array.from(Array(16).keys()); const res = [arr.slice(0, splitBy), arr.slice(splitBy, -splitBy), arr.slice(-splitBy)]; console.log(res);
这只是缩短了变量名,本质和原代码完全一致。
另外,也可以尝试用解构赋值,但这种写法反而会降低可读性,没有实际效率提升:
const splitBy = 3; const arr = Array.from(Array(16).keys()); const [, ...middle] = arr.slice(splitBy); const result = [arr.slice(0, splitBy), middle.slice(0, -splitBy), arr.slice(-splitBy)];
显然这种写法不如原代码直观。
总结来说,你的原代码已经是最优解,不需要额外优化。
内容的提问来源于stack exchange,提问作者MAR
相关产品推荐
相关产品推荐

