如何在简洁的单行初始化语句中用 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条件?