2016-07-11 10 views
0

I Knoten Shell verwende diese zu testen: Übrigens, ich bin neu in JavascriptJavaScript Push-Methode zu ändern Werte

x = [1,2] 
y = [3,4] 
k = [] 
for (n in x.concat(y)) { k.push(n); } 

nun die Eingabe k druckt die folgenden:

[ '0', '1', '2', '3' ] 
+1

'k = x.concat (y)' –

+0

Was ist die erwartete Ausgabe? Ist es "[1,2,3,4]"? Übrigens ist "n" der Index, nicht der Wert. Deshalb siehst du die "0 ... n-1". –

+0

'for..in' ist nicht' foreach'; nicht genau. vielleicht verstehen Sie das Ergebnis, wenn Sie versuchen, x = [7,8], y = [6,5] ' – Thomas

Antwort

0

Sie schieben die Index, nicht die tatsächlichen Elemente. Probieren Sie etwas wie folgt aus:

var x = [1,2]; 
var y = [3,4]; 
var k = []; 

var z = x.concat(y); 
for (var n in z) { 
    k.push(z[n]); 
} 

Lesen Sie mehr hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

+1

** Es gibt keine Garantie, dass für ... in die Indizes in einer bestimmten Reihenfolge zurückgibt. ** – paradite

+0

@paradite Welchen Unterschied macht das? – Brad

+1

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for...in#Array_iteration_and_for...in – paradite

3

Es ist nicht erforderlich, für die Schleife alle einfach zuweisen die Array#concat Methode Rückgabewert, der die verkettete Arrays ist.

var k = x.concat(y) 

FYI: In for...in Schleifen Sie den Schlüssel bekommen, falls es wird der Array-Index sein. Es wurde für die Objektiteration entwickelt. Verwenden Sie simple for loop statt. Auch Array#map oder Array#forEach kann verwendet werden, wie pro Ihre Anforderung.

Ein Beispiel mit Array#forEach:

a.concat(b).forEach(function(e){ 
    k.push(e); 
}); 

Im Fall, wenn Sie dann Array#push mit Function#apply Methode verwenden, um ein Array von Werten zu einem vorhandenen Array schieben mögen.

[].push.apply(existingArray, arrayOfValuesToPush); 

In Ihrem Fall wäre es:

[].push.apply(k, a.concat(b)); 
// or 
[].push.apply(k, a); 
[].push.apply(k, b); 
+0

Klar, diese Person kann 'concat' benutzen, da' concat' im Code selbst steht ... Das 'for ... in' steht hier. – Brad

+0

Nun, was ist, wenn ich an eine bestehende Liste k anhängen möchte? – Misgevolution

+0

@Misgevolution: in diesem Fall verwenden Sie '[] .push.apply (k, a)', wobei 'k' vorhanden Array und' a' ist das Array, das Sie verketten möchten –

1

Sie benötigen statt Index des Arrays auf das Element verweisen

for (n in _m=x.concat(y)) { 
k.push(_m[n]); 
} 

JSFIDDLE

+0

Besser als das Objekt in einem höheren Bereich zu deklarieren . Vielen Dank! – Misgevolution

1

Sie verwenden eine for...in Schleife auf einer Datenstruktur, die typischerweise nicht mit ke bedienen y/Wert-Paare.

Also was tatsächlich passiert, ist in jeder Iteration Ihrer for...in Schleife, übergeben Sie den Index an n und schieben Sie diesen Index auf ein neues Array.

Was sind Sie wahrscheinlich wollen, ist eigentlich die forEach method native to arrays.

Welches ist Ihren Code ändert, so etwas zu sein ...

var x = [1,2]; 
var y = [3,4]; 
var k = []; 
x.concat(y).forEach(function(element, index) { 
k.push(element); 
} 

Es gibt auch die Array.map Methode auch native Arrays, die ein völlig neues Array tatsächlich produzieren wird (anstelle von Ihnen k und push definieren zu müssen zu ihm.

var x = [1,2]; 
var y = [3,4]; 

var k = x.concat(y).map(function(element, index) { 
// the return value is the element that will be at the 
// new array's index. 
return element; 
} 
+0

Schön! Ich wusste nichts von der Existenz von forEach. – Misgevolution

+0

Ich habe auch ein Beispiel für die Karte hinzugefügt!Was wird das gleiche erreichen, aber ein wenig prägnanter :) – Morklympious

0

Versuchen Sie, diese (in ES5):

var k = x.concat(y); 

Versuchen Sie, diese (in ES6):

for (let n of x.concat(y)) { 
    k.push(n); 
} 
+0

Jemand hat diese Antwort bereits vor 20 Minuten gepostet. –

+0

Ja, ich gebe ihm eine kurze und einfache Antwort, ohne einige Dinge zu verwirren. – Jain