2016-11-15 2 views
0

Ich versuche, ein Array (mehrere Male) in ein anderes Array zu schieben. Statt eines Arrays von Arrays erhalte ich alle Werte der Mehrfach-Push-Versuche als ein einzelnes Array. Ich habe versucht, ein Array implizit zu schieben (d. H. push([val1,val2]), explizit ein neues Array zu erstellen und dann das neue Array zu schieben. Hier ist der Schlüssel Teil des Codes:Javascript drängen Array zu Array, sondern verketten statt

var coordinates=[]; 
... 
for(i=0;i<6;i++) 
{ 
    ... 
     for(var j=start;j<circum[i].length;j++) 
     { 
      var segmentCoords=[]; 
      ... 
       if(segmentFlag===false) 
       {       
        segmentCoords.push([i+1,segmentLength]); 
        segmentFlag=true;       
       } 
       ... 
       if(segmentFlag===true) 
       { 
        var tempArray=new Array(i+1,segmentLength); 
        segmentCoords.push(tempArray); 
        segmentLength+=sectorLength; 
        coordinates.push(segmentCoords); 
        segmentFlag===false;       
       } 
      ... 
} 

Aus den vielen Stackoverflow Fragen/Antworten, die ich angeschaut habe, erwarte ich meine Koordinaten Array so etwas wie folgt aussehen: [[val1, val2],[val3,val4],[val5,val6]]. Stattdessen ist es [val1,val2,val3,val4,val5,val6]. Das würde ich erwarten, wenn ich .concat() oder .apply() verwenden würde.

Kann mir jemand erklären, warum mein Code kein Array von Arrays generiert?

Ich habe den vollständigen Code hier https://jsfiddle.net/Seytom/7xm9s4qr/, falls Sie mehr davon sehen wollen.

+0

'var superSetArray = []; superSetArray.push ([1,2]); superSetArray.push ([3,4]); superSetArray.push ([5,6]); console.log (superSetArray); '- Dieser Code funktioniert genau so, wie Sie es erwarten. – Developer

Antwort

2

Sie scheinen von Ihrer console.log getäuscht zu werden. Beachten Sie den Unterschied zwischen diesen beiden Aussagen:

console.log('string ' + [[1,2],[3,4]]); // string, '1,2,3,4' 
 

 
console.log('string ', [[1,2],[3,4]]); // string, [[1,2],[3,4]]

Weil Sie das Array in einen String werden Nötigung, dies ist das Ergebnis. Es ist die gleiche wie:

console.log(new Array([1,2],[3,4]).join(',')); // 1,2,3,4

Es ist einfach das, was Arrays tun, wenn Sie sich ihnen anzuschließen, und zwar unabhängig davon, ob sie verschachtelt sind. Es ist besser, das Array separat zu protokollieren, damit Sie es in Ihrer Konsole untersuchen können. Drucken Sie einfach Ihre Zeichenfolge und fügen Sie das Array als zweites Argument hinzu. (Die Konsole nimmt eine unendliche Anzahl von Argumenten und druckt sie alle als eine Anweisung - Safari druckt sogar die erste als einen speziellen Typ, wenn es eine Zeichenkette ist, so dass sie klarer zu lesen ist).

Kurz gesagt: push verhält sich genau wie erwartet, und Ihr Code sollte einfach wie vorgesehen funktionieren, aber das Drucken auf der Konsole scheint ein wenig zu wünschen übrig :).

+1

Ich erinnere mich, als ich das zuerst gemacht habe, oh der facepalm ... +1 – Kingsthor

+1

Danke, das war es genau. – Seytom

+1

@Kingsthor, ja es gibt jetzt eine Art bleibende Markierung :) – Seytom

0

Verwendung Array.concat:

var arrA = [0]; 
 
var arrB = [1, 2]; 
 
while (arrA.length < 10) { 
 
    arrA = arrA.concat(arrB) 
 
} 
 
console.log(arrA)

+0

Dies ist genau das Verhalten, das das OP vermeiden will oder zu haben scheint (siehe meine Antwort unten). – somethinghere