js二維數組新認識

js的二維數組

以前輕視了js二維數組的問題,直到寫筆試題的時候,才發現踩了不應踩的坑,因此今天作一下總結,以防再犯;數組

原由

原由是這樣的,我想建立一個初值都爲1的bash

4*4

二維數組,因而乎很直接進行了以下操做:ui

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);複製代碼

結果卻一直報錯spa

TypeError: Cannot set property '0' of undefinedcode

通過

思索了一下子,我又修改成:對象

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的每一維都指向的是同一個對象呢。。console

結果

雖然上面的修改也能夠獲得正確結果,但老是看着不正規,上網搜索,發現真正的操做方法是我一直忽略的new Array()!!class

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);引用

相關文章
相關標籤/搜索