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

如何用一行简洁代码初始化包含n个互不相同空数组的新数组

问题根因

Array.prototype.fill() 方法的逻辑是将同一个值填充到数组的所有目标位置。当你传入引用类型(比如空数组[])时,填充的是同一个内存引用地址,所有数组元素都指向同一个数组实例,所以修改任意一个子数组都会同步影响所有其他元素,这就是你测试代码中badBucket的所有子数组都被推入33的原因。

你使用的JSON序列化反序列化方案虽然能生成独立数组,但存在明显局限性:无法处理JSON不支持的数据类型(函数、Symbol、undefined、循环引用、BigInt等),会造成数据丢失或报错,不推荐作为通用解决方案。

推荐实现方案

两种常用的无副作用写法:

  • 方案1:使用Array.from(最简洁)
const radix = 10;
const bucket = Array.from({ length: radix }, () => []);
// 每个子数组都是独立的新数组,修改互不影响
bucket[3].push(33);
// 只有bucket[3]会被修改
  • 方案2:使用map遍历生成
const radix = 10;
const bucket = Array(radix).fill().map(() => []);
// 先调用fill()填充占位值,再通过map每次返回新的空数组
关于fill方法的说明

fill 本身的设计就是静态值批量填充,没有办法直接通过fill实现动态生成不同引用值的需求,所有能达成目标的写法本质上都是额外叠加了「每次生成新值」的逻辑,并非单纯依赖fill的原生能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:48:03