js二維陣列新認識

一隻蔥貝發表於2018-04-12

js的二維陣列

之前輕視了js二維陣列的問題,直到寫筆試題的時候,才發現踩了不該踩的坑,所以今天做一下總結,以防再犯;

起因

起因是這樣的,我想建立一個初值都為1的

4*4

二維陣列,於是乎很直接進行了如下操作:

var d_arr = [];
for(let i = 0;i < 4;i++){
  for(let j = 0;j < 4;j++){
    d_arr[i][j] = 1;
  }
}
console.log(d_arr);複製程式碼

結果卻一直報錯

TypeError: Cannot set property '0' of undefined

經過

思索了一會兒,我又修改為:

var d_arr = [];
var temp_arr = [];
    for(let j = 0;j<4;j++){
        temp_arr[j] = 0;
    }
    for(let i = 0;i<4;i++){
        d_arr[i] = temp_arr;
    }
    console.log(d_arr);複製程式碼

不知道大家有沒有看出來,我犯了一個很愚蠢的錯誤。。雖然console.log可以正常列印二維陣列了,但是,每當我修改這個二維陣列的值,比如我想修改[0][1]值為0,當我進行d_arr[0][1]=0;後,結果是:[ [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ] ] 可見,如果看成這是一個4*4的矩陣,第二列全被改成了1,其實這是因為,陣列是引用型別的,我賦值的時候,是把同一個陣列賦給了d_arr的每一個元素。。d_arr的每一維都指向的是同一個物件呢。。

結果

雖然上面的修改也可以得到正確結果,但總是看著不正規,上網搜尋,發現真正的操作方法是我一直忽略的new Array()!!

var d_arr = new Array();
for(let i = 0;i<4;i++){
  d_arr[i] = new Array();
  for(let j = 0;j<4;j++){
    d_arr[i][j] = 0;
  }
}
console.log(d_arr);複製程式碼

這樣就是一個想要得到的d_arr啦!

ps:new Array還有一個用處,就是指定陣列的長度:var arr = new Array(8);


相關文章