level 1
var f = [];
f.length=2;
f.fill([]);
for (var i = 0; i < (f.length - 1); i++) {
for (var j = i+1; j < f.length; j++) {
f[i].push(i);
f[j].push(j);
}
}
感觉上最终f的值应该是[[0],[1]]
但最后结果f的值是[[0,1],[0,1]]
这是什么原理?
2021年06月04日 14点06分
1
level 11
可能f.fill([])相当于f.fill([0]),空缺会不会默认填充0
2021年06月05日 16点06分
2
level 12
// 因为fill([])方法 填充的都是同一个数组(同一个引用地址) 并不会每次都生成新的数组 数组也是引用类型的
let a = [];
a.length = 3;
a.fill([]);
a[2].push(123);
alert(
JSON.stringify(a) // [[123], [123], [123]]
);
alert(a[0] === a[1]); // true
alert(a[0] === a[2]); // true
alert(a[0] === [123]); // false
2021年06月06日 05点06分
3
level 12
let f = [...Array(2)].map(() => []); // 换种方式 就是你想要的
for (var i = 0; i < (f.length - 1); i++) {
for (var j = i+1; j < f.length; j++) {
f[i].push(i);
f[j].push(j);
}
}
alert(
JSON.stringify(f) // [[0], [1]]
);
alert(
JSON.stringify(
Array.from(Array(2), (_, i) => [i]) // [[0], [1]]
)
);
2021年06月06日 05点06分
4
非常感谢,我学习下
2021年06月07日 10点06分