2017-06-18 109 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中没有真正的数组。 –