2016-06-01 2 views
-2

Sorry, wenn duplizieren, aber ich kann keine passende Antwort finden. Ich habe zwei Arrays:Javascript - Merge Array auf Tasten

array1 = { '0': 'f1', '1': 'f2'}; 
array2 = { '0': 's1', '1': 's2'}; 

Wie kombinieren (merge), diese beiden Arrays, so etwas zu bekommen:

array3 = [['f1', 's1'], ['f2', 's2']]; 

Dank!

+2

Ihre ersten Beispiele sind n ot gültiges JavaScript. –

+0

Wolltest du gleich zwei Objekte machen? '{0: 'f1', 1: 'f2'}'? –

+0

Ich habe versehentlich vergessen, geschweifte Klammern hinzufügen: –

Antwort

0

Angenommen, Sie die Indizes in Ihrer Frage versehentlich hinzugefügt und nicht mit einem anderen Datentyp arbeiten ... Der einfachste Weg ist eine for-Schleife Ich stelle mir vor:

var newArray = []; 
for(var i in array1){ 
    newArray[i] = [array1[i], array2[i]]; 
} 

Edit: Das mit Objekten arbeiten oder Arrays von gleicher Länge.

0

Wenn Sie sicher sind, dass die Länge von zwei Arrays gleich ist, verwenden Sie die Trey-Lösung. Ansonsten benutzen:

var array3 = []; 

l1 = array1.length; 
l2 = array2.length; 

len = (l1 > l2)? l2 : l1; 

var array3 = []; 

for(i = 0; i < len; i++){ 
    array3.push([array1[i],array2[i])); 
} 
3

Wenn Ihre Eingaben sind Arrays

var a = ['f1', 'f2']; 
var b = ['s1', 's2']; 

Die Transformation Sie suchen, ist ein zip

var zip = (xs,ys)=> 
    xs.reduce((zs,x,i)=> 
    zs.concat([[x, ys[i]]]), []); 

zip(a,b); 
//=> [['f1', 's1'], ['f2', 's2']] 

Dies setzt voraus, beide Eingänge die gleiche Länge .


Wenn Ihre Eingaben sind Objekte mit numerischen Tasten

var a = {'0': 'f1', '1': 'f2'}; 
var b = {'0': 's1', '1': 's2'}; 

var zipObj = (xs,ys)=> 
    Object.keys(xs).reduce((zs,xk)=> 
    zs.concat([[xs[xk], ys[xk]]]), []); 

zipObj(a,b); 
//=> [['f1', 's1'], ['f2', 's2']] 

Trotz Sie nicht darum gebeten hatte, Trey zu verpflichten, ich habe ES5 Versionen der Funktionen enthalten

"use strict"; 

// zip arrays 
var zip = (xs,ys)=> 
    xs.reduce((zs,x,i)=> 
    zs.concat([[x, ys[i]]]), []); 

// zip objects 
var zipObj = (xs,ys)=> 
    Object.keys(xs).reduce((zs,xk)=> 
    zs.concat([[xs[xk], ys[xk]]]), []); 
+0

Ihr ES5-Abschnitt verwendet weiterhin Pfeilfunktionen. Scheint sowieso unnötig. – canon