2016-11-02 4 views
2

Ich bekomme Attributwerte. Ich muss in mehrdimensionale Array setzen, aber es zeigt Fehler. Wo irre ich mich?set jquery mehrdimensionales Array

var myArray = []; 
amount=10; 
x=1 
$(id).closest('td').nextAll().find('input').each(function (n) { 

     myArray[x]['id'] = $(this).attr('data-id'); 
     myArray[x]['year'] = $(this).attr('data-year'); 
     myArray[x]['month'] = $(this).attr('data-month'); 
     myArray[x]['amount'] = amount; 

     x++; 
}); 
console.log(myArray); 
+1

Mögliches Duplikat [erstellen zweidimensionale Anordnung und Schleife durch in jquery] (http://stackoverflow.com/questions/26140640/create-two-dimensional-array-and-loop-through-it-in-jquery) –

Antwort

1

Sie vermissen diese Zeile

myArray[x] = {}; 

vor dieser Zeile

myArray[x]['id'] = $(this).attr('data-id'); 

da Sie diesen Objekt zuerst, bevor Sie Eigenschaften, um es initialisieren müssen.

0

Arrays müssen zuerst deklariert werden, um Elemente hinzuzufügen. Zum Beispiel

var d = []; 
var value = 2; 
d[0]["key"] = value; 

wird nicht funktionieren, weil d[0] noch kein Array ist. Aber:

var d = []; 
var value = 2; 
d[0]= []; 
d[0]["key"] = value; 

funktionieren wird, weil d[0] bereit ist Schlüssel zu akzeptieren.

In Ihrem Fall;

>>> myArray[x] = []; 
myArray[x]['id'] = $(this).attr('data-id'); 
myArray[x]['year'] = $(this).attr('data-year'); 
myArray[x]['month'] = $(this).attr('data-month'); 
myArray[x]['amount'] = amount; 

wird funktionieren.

0

Obwohl Sie das Array als leeres Array initialisiert haben, sollten Sie die Werte an einem bestimmten Ort initialisieren. Wenn Sie nicht angeben, ist myArray [x] nicht definiert. So müssen Sie explizit ein leeres Objekt zuweisen, um Tasten myArray zu aktualisieren [x] [ „key“]

var myArray = []; 
 
amount = 10; 
 
x = 1 
 
$(id).closest('td').nextAll().find('input').each(function(n) { 
 
    //Need to initialize with an object a location x; 
 
    myArray[x] = {}; 
 
    myArray[x]['id'] = $(this).attr('data-id'); 
 
    myArray[x]['year'] = $(this).attr('data-year'); 
 
    myArray[x]['month'] = $(this).attr('data-month'); 
 
    myArray[x]['amount'] = amount; 
 

 
    x++; 
 
}); 
 
console.log(myArray);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>