首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要得到一个有6个数组(6)而不是6个数组(1)的数组?

为什么我要得到一个有6个数组(6)而不是6个数组(1)的数组?
EN

Stack Overflow用户
提问于 2022-07-01 19:19:16
回答 3查看 50关注 0票数 0

我试图得到一个数组,里面有一些数组,每个内部数组都应该包含2的n次方之一,而不是全部。

代码语言:javascript
复制
let n = 5;
    let arr = Array(n + 1).fill([]);
    const transform = function (el, i) {
      el.push(2 ** i);
    };
    console.log(arr); // [Array(0), Array(0), Array(0), Array(0), Array(0), Array(0)]
    arr.map(transform);
    
    console.log(arr); //[Array(6), Array(6), Array(6), Array(6), Array(6), Array(6)]
    //was expecting //[[1], [2], [4], [8], [16], [32]]

EN

回答 3

Stack Overflow用户

发布于 2022-07-01 19:23:10

当使用fill时,它们共享同一个实例。所以改变一个会改变所有其他的。填充后需要使用map

代码语言:javascript
复制
new Array(6).fill(null).map(() => []).map(transform)
票数 0
EN

Stack Overflow用户

发布于 2022-07-01 19:31:16

使用传统的for循环来完成最终结果可能更容易。使用map和transform是一种更为迂回的方法,可以执行以下操作:

代码语言:javascript
复制
let n = 5;
let arr = [];
for (let i = 0; i <= n; i++) {
  arr.push([2**i]);
}
console.log(arr);

票数 0
EN

Stack Overflow用户

发布于 2022-07-01 19:43:12

Fill只是通过引用该数组来设置每个索引。它并不是在每个索引中创建一个新数组。

创建数组并用空数组填充数组的最简单方法是使用Array.from

代码语言:javascript
复制
const n = 5;
const transform = (arr, index) => arr.push(2 ** index);
const myArray = Array.from({length: n}, () => []);
myArray.forEach(transform);
console.log(myArray);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72833769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档