为什么数组中的多个分配以这种方式发生?

时间:2019-03-29 11:37:06

标签: javascript arrays

当我使用此方法创建多维数组时,我使用此方法创建了一个带有初始化程序的一维数组,然后将一个元素分配给该多维数组,如图所示,我确实将该元素分配给数组的每个元素,怎么办?这会发生吗?

     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)

1 个答案:

答案 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);