2017-06-18 2 views
0

Ich versuche Wert von einem json in einen 2D-ArrayJavaScript in Typeerror 2D-Array

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]); 
    }) 

zu lesen Für i = 0 und i = 1, es funktioniert gut, aber auf i = 2 gibt es den Fehler

TypeError: Cannot set property '0' of undefined

+1

'arr' nur 2 Elemente enthält, die Sie mit' bekommen arr [0] 'und' arr [1] ', aber wenn Sie versuchen, ein drittes, nicht-existentes Element zu erhalten mit' arr [2] 'Sie erhalten' undefined' und dann versuchen Sie, auf eine Eigenschaft von 'undefined' zuzugreifen, die Ihnen das TypeError –

+0

@MikaelLennholm Wie erstelle ich ein 2D-Array ohne Begrenzung auf Elemente? – Arpit

+0

Siehe Musas Antwort. Arrays haben keine festgelegte Anzahl von Elementen noch eine maximale Anzahl von Elementen, die Sie aus einem Array frei hinzufügen und entfernen können –

Antwort

2

Ihr Array arr enthält nur zwei Elemente, die leeren Arrays.
Also arr[0] ist die erste und arr[1] ist die zweite, die alle, arr[2] nicht existiert. Wenn Sie arr = [[],[],[]]; hätten, dann würde arr[2] funktionieren, aber Sie können das Problem dort sehen.
Die beste Option besteht darin, das Sub-Array vor der Verwendung zu erstellen.
Die Funktion forEach stellt auch einen Zähler zur Verfügung, der verwendet werden kann, anstatt einen eigenen zu erstellen.

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

Ich würde auch vorschlagen, den Index von der 'forEach()' -Funktion vorgesehen, anstatt Ihren eigenen Zähler –

+0

zu erstellen Ich sehe Javascript behandelt Arrays anders als die meisten anderen Sprachen. Die eckigen Klammern zeigen separate Arrays anstelle von Dimensionen. – Arpit

+0

@Arpit Ja, Arrays in Javascript sind nur Objekte mit einem bestimmten syntaktischen Zucker. In JS gibt es keine echten Arrays. –

Verwandte Themen