You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript的reduce方法实现指定格式的数组切片组合

解决你的reduce数组转换问题

你的目标是把数组 [1,1,1,0,0,0] 转换成 [[1,1,1], [1,1,0], [1,0,0], [0,0,0]],但当前的reduce代码会产生多余元素,核心问题是没控制好需要处理的索引范围——原数组长度为6,要截取长度为3的子数组,起始索引只能是0、1、2、3(因为3+3=6,刚好取满3个元素),而你的代码遍历了所有索引(0到5),导致i=4和5时截取到长度不足3的数组,最终结果出现冗余内容。

修正后的reduce代码

var x = [1,1,1,0,0,0];
var y = x.reduce((data, val, i, arr) => {
  // 仅当起始索引i加上3不超过数组长度时,才截取完整的3元素子数组
  if (i <= arr.length - 3) {
    data.push(arr.slice(i, i + 3));
  }
  return data;
}, []);

console.log("check y", y); // 输出: check y [ [ 1, 1, 1 ], [ 1, 1, 0 ], [ 1, 0, 0 ], [ 0, 0, 0 ] ]

原代码的问题分析

原代码里的 i%2==0 ? data.push(...) : data.push(...) 完全是多余的——不管条件真假都执行相同的push操作,相当于每遍历一个索引就push一次子数组。当i=4时,slice(4,7) 得到 [0,0];i=5时,slice(5,8) 得到 [0],这两个不符合你想要的格式,还会让结果数组长度变成6而非期望的4。加上 i <= arr.length -3 的判断后,就只处理能截取到完整3元素子数组的索引,刚好得到4个符合要求的结果。

可选的简洁写法

如果你觉得reduce的逻辑有点绕,也可以用 Array.from 实现,可读性更强:

var x = [1,1,1,0,0,0];
var y = Array.from({ length: x.length - 2 }, (_, i) => x.slice(i, i + 3));
console.log(y); // 同样输出目标数组

内容的提问来源于stack exchange,提问作者Naveen Asapu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:15