如何使用JavaScript将数组中连续的0转换为子数组?
JavaScript数组分组转换实现方案
要把给定的数组按规则转换,核心是将连续的0合并为数组(单个0也转成数组),1则保持单个元素,下面提供两种直观的实现方式:
方法一:使用reduce函数(简洁高效)
reduce是处理这种累加分组场景的利器,代码如下:
const test = [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]; const result = test.reduce((acc, current) => { const lastItem = acc[acc.length - 1]; if (current === 0) { // 最后一项是数组,说明正在收集连续0,直接追加 if (Array.isArray(lastItem)) { lastItem.push(current); } else { // 否则新建数组存当前0 acc.push([current]); } } else { // 是1就直接加入结果 acc.push(current); } return acc; }, []); console.log(result); // 输出:[[0],1,[0],1,1,1,[0,0],1,[0,0,0,0],1]
方法二:使用普通for循环(直观易懂)
如果对reduce不太熟悉,用普通循环也能轻松实现:
const test = [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]; const result = []; let zeroGroup = null; for (const num of test) { if (num === 0) { // 还没开始收集0,就新建数组并加入结果 if (!zeroGroup) { zeroGroup = []; result.push(zeroGroup); } zeroGroup.push(num); } else { // 遇到1,重置分组状态,直接加入1 zeroGroup = null; result.push(num); } } console.log(result);
两种方法逻辑一致:遍历数组时跟踪当前是否在收集连续的0,根据当前元素类型决定是追加到分组数组还是直接添加单个元素。
内容的提问来源于stack exchange,提问作者Gerardo Scoppetta
相关产品推荐
相关产品推荐

