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

使用reduce方法转换数组遇问题,寻求技术指导

使用reduce实现数组转换的解决方案

直接上可行的代码实现:

const inputArr = [0, 1, 0, 1, 0, 0, 1, 0];
const transformedArr = inputArr.reduce((acc, curr) => {
  if (curr === 1) {
    acc.counter += 1;
    acc.result.push(acc.counter);
  } else {
    acc.result.push(0);
  }
  return acc;
}, { counter: 0, result: [] }).result;

console.log(transformedArr); // 输出: [0, 1, 0, 2, 0, 0, 3, 0]

代码解释

  • 用reduce的初始值维护一个状态对象,包含两个属性:counter用来累计原数组中非0元素的出现次数,result用来存储转换后的结果数组。
  • 遍历原数组时:
    • 遇到值为1的元素,先把counter加1,再将更新后的counter推入结果数组;
    • 遇到值为0的元素,直接将0推入结果数组,不改变counter。
  • 最后从reduce返回的状态对象中取出result属性,就是目标数组。

关于需求表述的说明

从你的输入输出示例来看,实际需求应该是原数组中的非0元素(此处为1)替换为到当前位置为止的累计出现次数,0元素保持不变,和你描述的“0元素转换为前置元素与当前元素的和”不符,推测是表述偏差,上述代码是按照你给出的输入输出示例实现的正确逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:24