js中fill的引用问题

114 阅读1分钟

今天在创建二维数组时发现了一个问题

const G = new Array(2).fill(Array.from(new Array(3)).fill(0));

如上所示,这行代码创建了一个二维数组

G[0][0] = 1;

但当我们执行上面这行代码时,本来想的情况是只改变第一个数,
但是结果却是下面这样的:

image.png

上网查之后发现,fill方法填充的是引用类型,
所以改一个数据,相同引用的数据也会变。

解决方案:
使用Array.from()

        const G = Array.from({ length: 2 }, () => new Array(3).fill(0));
        G[0][0] = 1;
        console.log(G);

或者

        const G = new Array(2).fill(0).map(() => new Array(3).fill(0))
        G[0][0] = 1;
        console.log(G);

再打开控制台,就可以看到成功了~

image.png

注:Array.from()的第二个参数相当于数组中的map()方法。