2016-06-17 5 views
1

I Follow-Code haben:Zusammenführen von zwei Arrays in einem mit push()

list1 = { 
    Items: [ 
     { 
      ID: 1, 
      Name: "Zurich" 
     }, 
     { 
      ID: 2, 
      Name: "London" 
     },   { 
      ID: 3, 
      Name: "New York" 
     } 
    ] 
}; 

list2 = { 
    Items: [ 
     { 
      ID: -1, 
      Name: "Dummy" 
     }, 
     { 
      ID: 0, 
      Name: "Dummy2" 
     } 
    ] 
}; 

list1.push(list2); 

Ich erwarte Ergebnis folgen:

list1:

  • 0: Object (Zurich)
  • 1: Object (London)
  • 3: Object (New York)
  • 4: Object (Dummy)
  • 5: Object (Dummy2)

Aber ich habe diese ein:

Liste1:

  • 0: Object (Zürich)
  • 1: Object (London)
  • 2: Object (New York)
  • 3: Object (Artikel)
    • 0: Object (Dummy)
    • 1: Object (Dummy2)

Wie kann ich meine expectet Ergebnis bekommen?

Danke und Prost.

+0

Der von Ihnen angegebene Befehl 'list1.push (list2);' würde mit einem * TypeError * fehlschlagen. Und warum erwartest du '4: Object (Items)' anstelle von '4: Object (Dummy)'? –

+0

@squint Das war ein Tippfehler ... Und ich habe keinen Fehler, es druckt mein zweites Ergebnis im Falle meiner erwarteten..Aber mit dem concat funktioniert es .. – MrBuggy

+0

'list1' hat kein' .push() 'Methode, also müssen Sie etwas anderes tun. Die Methoden '.push()' und '.concat()' sind sehr unterschiedlich. Einer mutiert, der andere ersetzt. Dies kann in einigen Fällen eine wichtige Unterscheidung sein. –

Antwort

6

Neben Array#concat Sie Array#push.apply es

var list1 = { Items: [{ ID: 1, Name: "Zurich" }, { ID: 2, Name: "London" }, { ID: 3, Name: "New York" }] }, 
 
    list2 = { Items: [{ ID: -1, Name: "Dummy" }, { ID: 0, Name: "Dummy2" }] }; 
 

 
[].push.apply(list1.Items, list2.Items); 
 

 
console.log(list1);

+0

Hallo danke, das funktioniert. Was ist mit bewerben? Ich meine: list1.push.apply (list2)? Ich habe etwas darüber gehört, aber ich weiß nicht, wie es funktioniert ... Weißt du das? Prost und danke. – MrBuggy

+0

Hallo, ich habe Follow-Fehler: Kann die Eigenschaft "anwenden" von undefined nicht lesen? – MrBuggy

+1

Es war mein Fehler, jetzt funktioniert es - perfekt! Vielen Dank!!! – MrBuggy

4

Die Frage war, wie dies mit Push-to-do() nicht concat():

for (var i = 0; i < list2.Items.length; i++) { 
    list1.Items.push(list2.Items[i]); 
} 
+0

Ja, Sir, danke! Ich habe eine Frage: Gibt es auch eine clevere Möglichkeit, diese Listen ohne eine Schleife zusammenzufassen, aber trotzdem Push zu verwenden? Ich habe etwas über push.apply() gehört, aber ich weiß nicht, wie es funktioniert oder wie man es benutzt .. Prost .. – MrBuggy

+1

@MrBuggy Ja. Sie können Array.prototype.push.apply (list1.Items, list2.Items); - Dies funktioniert, da das erste Argument von apply den Wert auf list1.Items setzt und das zweite Argument ein Array von Argumenten, die an push übergeben werden. –

+0

Hallo und danke! Im answert, der als richtig gekennzeichnet ist, kannst du sehen, wie ich mit apply gesucht habe. Danke und Prost .. – MrBuggy

2

list1 = { 
 
    Items: [ 
 
     { 
 
      ID: 1, 
 
      Name: "Zurich" 
 
     }, 
 
     { 
 
      ID: 2, 
 
      Name: "London" 
 
     },   { 
 
      ID: 3, 
 
      Name: "New York" 
 
     } 
 
    ] 
 
}; 
 

 
list2 = { 
 
    Items: [ 
 
     { 
 
      ID: -1, 
 
      Name: "Dummy" 
 
     }, 
 
     { 
 
      ID: 0, 
 
      Name: "Dummy2" 
 
     } 
 
    ] 
 
}; 
 

 
list1.Items = list1.Items.concat(list2.Items); 
 
console.log(list1);
verwenden könnte

+0

Grund zu downvote ?? –

1

versuchen mit:

list2.items.forEach(function (item) { 
    list1.items.push(item) 
}) 
0

Sie müssen durch jede items in list2 Schleife und dann holen sie in list1 schieben .. Unterhalb der Schnipsel ist mit $.each

var list1 = { 
 
    Items: [ 
 
     { 
 
      ID: 1, 
 
      Name: "Zurich" 
 
     }, 
 
     { 
 
      ID: 2, 
 
      Name: "London" 
 
     },   { 
 
      ID: 3, 
 
      Name: "New York" 
 
     } 
 
    ] 
 
}; 
 

 
var list2 = { 
 
    Items: [ 
 
     { 
 
      ID: -1, 
 
      Name: "Dummy" 
 
     }, 
 
     { 
 
      ID: 0, 
 
      Name: "Dummy2" 
 
     } 
 
    ] 
 
}; 
 

 
$(list2.Items).each(function(k,v){ 
 
    list1.Items.push(v); 
 
    
 
}) 
 
console.log(list1);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

Verwenden Sie die spread operator:

list1.Items.push(...list2.Items) 

Spread ist eine ES2015-Funktion. Ihre Zielbrowser oder Runtime unterstützen es möglicherweise noch nicht, also überprüfen Sie die compatibility table (oder verwenden Sie einen Transpiler wie babel).

Verwandte Themen