当我使用此方法创建多维数组时,我使用此方法创建了一个带有初始化程序的一维数组,然后将一个元素分配给该多维数组,如图所示,我确实将该元素分配给数组的每个元素,怎么办?这会发生吗?
Array.dim=function(dimensions,init){
var a=[],i;
for(i=0;i<dimensions;i++){
a[i]=init;
}
return a;}
var p=Array.dim(20,0);
p
(20) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var p=Array.dim(10,[]);
p[0][0]=0;
(10) [Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1)]
0: [0]
1: [0]
2: [0]
3: [0]
4: [0]
5: [0]
6: [0]
7: [0]
8: [0]
9: [0]
length: 10
__proto__: Array(0)
答案 0 :(得分:1)
您交出数组引用,并且每个项目都共享给定数组的相同对象引用。
您可以使用一个为每次调用返回新数组的函数。
Array.dim = function(dimensions, init) {
var a = [],
i;
for (i = 0; i < dimensions; i++) {
a[i] = typeof init === 'function' ? init() : init;
}
return a;
}
var p = Array.dim(20, 0),
q = Array.dim(10, () => []);
q[0][0] = 0;
console.log(p);
console.log(q);
一种略短的方法。
Array.dim = function(length, init) {
return Array.from({ length }, typeof init === 'function' ? init : () => init);
}
var p = Array.dim(20, 0),
q = Array.dim(10, () => []);
q[0][0] = 0;
console.log(p);
console.log(q);