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

Javascript嵌套forEach未按预期运行 实现Lodash _.zip功能出错

问题根因

你代码的核心错误出在const newArr = Array(array[0].length).fill([]);这一行。
fill方法传入引用类型的参数时,填充到数组所有位置的都是同一个引用的副本。也就是说你创建的newArr里的所有子数组,本质上指向同一个内存地址的数组对象,不管你往哪个下标对应的子数组里push内容,所有子数组都会同步更新,最终就出现了所有子数组内容完全一致、全部元素堆在一起的错误结果。

修复方案

初始化数组时不要用fill创建子数组,改为给每个位置生成独立的空数组即可,修复后的代码如下:

function zip(...array) {
  // 用Array.from的回调为每个位置生成独立的空数组
  const newArr = Array.from({length: array[0].length}, () => []);
  array.forEach((el, i) => {
    el.forEach((item, idx) => {
      newArr[idx].push(item);
    });
  });
  return newArr;
}

你之前注释掉的newArr[idx][i] = item写法也可以正常运行,只要子数组是独立创建的,两种赋值方式在这个场景下效果一致。
调用zip(['a', 'b'], [1, 2], [true, false])测试,返回结果为[['a', 1, true], ['b', 2, false]],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:57:04