2017-06-18 67 views
0

我試圖從一個JSON讀值轉換成一個二維數組JavaScript的類型錯誤在2D陣列

var arr = [[],[]]; 
    var i = 0; 
    var file = './test.json'; 
    jsonfile.readFile(file, function(err, objs) { 
     let i = 0; 
     objs.forEach(function (obj) { 
      arr[i][0] = obj["outcount"]; 
      arr[i][1] = obj["gateID"]; 
      arr[i][2] = obj["timestamp"]; 
      arr[i][3] = obj["eventCode"]; 
      i = i + 1; 
     }); 
     console.log(arr[2]); 
    }) 

對於i = 0且i = 1時,工作正常,但在設爲i = 2它提供錯誤

TypeError: Cannot set property '0' of undefined

+1

'arr'只包含2個元素,那你得到'常用3 [0]'和'改編[1]'但是當你試圖獲得第3,不存在的元素與'ARR [2] '你得到'undefined',然後嘗試訪問'undefined'的屬性,它給你那個TypeError –

+0

@MikaelLennholm如何創建一個沒有元素限制的二維數組? – Arpit

+0

看到穆薩的回答。數組沒有設置數量的元素也沒有最大數量的元素,您可以自由地從數組中添加和刪除 –

回答

2

您的數組arr只有兩個項目,它是空的數組。
所以arr[0]是第一個和arr[1]是第二個是所有,arr[2]不存在。如果你有arr = [[],[],[]];那麼arr[2]可以工作,但你可以在那裏看到問題。
最好的選擇是在使用它之前創建子數組。
另外,forEach函數提供了一個可以用來代替創建自己的計數器。

var arr = []; 
var file = './test.json'; 
jsonfile.readFile(file, function(err, objs) { 
    objs.forEach(function (obj, i) { 
     arr[i] = []; 
     arr[i][0] = obj["outcount"]; 
     arr[i][1] = obj["gateID"]; 
     arr[i][2] = obj["timestamp"]; 
     arr[i][3] = obj["eventCode"]; 
     i = i + 1; 
    }); 
    console.log(arr[2]); 
}) 
+1

我還建議使用'forEach()'函數提供的索引,而不是創建自己的計數器 –

+0

我看到JavaScript處理數組與其他大多數語言不同。方括號表示單獨的數組而不是尺寸。 – Arpit

+0

@Arpit是的,Javascript中的數組只是具有一些專用語法糖的對象。 JS中沒有真正的數組。 –