如何在简洁的单行初始化语句中用 n 个不同的空数组填充新数组? [复制]

Posted

技术标签:

【中文标题】如何在简洁的单行初始化语句中用 n 个不同的空数组填充新数组? [复制]【英文标题】:How do I fill a new array with n distinct empty arrays, in a concise one-line initialization statement? [duplicate] 【发布时间】:2021-11-13 15:03:25 【问题描述】:

这是我卡住的地方。我想采用此语句并以我填充的空数组(我推测它可能不适用于动态值)的方式对其进行修改,将桶初始化为 n 个不同的空数组。

我该怎么做?有没有办法让这个填充方法以预期的方式运行?

let radix = 10;
let badBucket = [...Array(radix).fill([])];
let goodBucket = JSON.parse(JSON.stringify([...Array(radix).fill([])]));
badBucket[3].push(33);
goodBucket[3].push(33);
console.log(JSON.stringify(badBucket));
console.log(JSON.stringify(goodBucket));

【问题讨论】:

你当前的代码有什么问题? 如果我要像这样 bucket[0].push(1) 将一个项目推送到 bucket[0],那么数组内容都会有 1 [[10],[10],[10 ],[10],[10],[10],[10],[10]],这几乎是不可取的 这是其中之一如果填充可以接受回调,我可以从回调返回一个新的空数组,就像这样... fill(() => []) 手指交叉。 ..awww,不幸的是,事实并非如此 const length = 10, bucket = Array.from( length ).map(() => []); @VaheJabagchourian ... 这与 one-liners 或这种 extra smart 无关。一个实际的解决方案通常只是在尽可能简单但仍然可读/可维护的实现之间进行足够好的平衡折衷。 【参考方案1】:

可以使用Array.from的回调函数。

let length = 5;
let res = Array.from(length, _=>[]);
console.log(res);

【讨论】:

感谢您使用下划线对象的特定替代版本,这是非常理想的并且产生了很好的可读响应,我可以推断出一个长度为 5 的对象分配给一个空数组。【参考方案2】:

试试:

let radix = 10;
let bucket = [...Array(radix)].map(e=>[])
bucket[0].push(1)
console.log(JSON.stringify(bucket));

【讨论】:

这正是满足我愿望的最短长度的一个班轮。谢谢你。现在我知道这两个函数(map、fill)中的哪一个会接受回调,以及相应的等效初始化语句。

以上是关于如何在简洁的单行初始化语句中用 n 个不同的空数组填充新数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

Java中如何实现在HTML中用循环语句显示多张图片。

C语言中用scanf和循环语句是怎么给数组一一赋值的,希望说得详细点

如何检查数组是不是是Javascript中的空数组数组

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段