2016-04-07 11 views
0

Entschuldigung, ich bin ein Anfänger in Javascript. Kann mir jemand erklären, wie dieses ObjektÄndern Sie ein Objekt in ein neues Array in Javascript

{toto:[12,13,15],titi:[45,12,34]} 

zu diesem Array

newArray = [ 
{ 
    toto:12, 
    titi:45 
},{ 
    toto:13, 
    titi:12 
},{ 
    toto:15, 
    titi:34} 
] 

auch zu ändern, was die Lösung, wenn die toto und titi nicht die gleiche Länge Dank für die Unterstützung hat!

+0

Die Lösung für variable Länge ist es nicht zu erlauben. Füllen Sie die Löcher, bevor Sie versuchen, zu kombinieren. – Malk

Antwort

1

Hier ist, wie ich es gemacht habe. Auf diese Weise müssen Sie die Namen der Schlüssel oder die Größe des Arrays nicht kennen, aber es erfordert einige Schleifen.

obj = {toto:[12,13,15],titi:[45,12,34]}; 
newArray = []; 

// Find the longest array in your data set 
longest = 0; 
Object.keys(obj).forEach(function(key) { 
    if (obj[key].length > longest) { 
    longest = obj[key].length; 
    } 
}); 

// Loop through the existing data set to create new objects 
for (i = 0; i<longest; i++) { 
    newObject = {}; 
    Object.keys(obj).forEach(function(key) { 
    newObject[key] = obj[key][i]; 
    }); 
    newArray.push(newObject); 
} 

console.log(newArray); 

plnkr.co demo in der script.js-Datei.

Wenn Sie ignorieren Schlüssel möchten, die undefined Werte für unebene Schleifen haben würde, können Sie eine bedingte innerhalb der forEach Schleife hinzufügen, um ein neues Objekt erstellt:

Object.keys(obj).forEach(function(key) { 
    if (obj[key][i] !== undefined) { 
     newObject[key] = obj[key][i]; 
    } 
    }); 
+0

toll !!!! Danke vielmals – llaid

1

Unter der Annahme, Längen von toto und titi sind die gleiche:

Obj = {toto:[12,13,15],titi:[45,12,34]}; 
newArray = []; 
for (var k in Obj["toto"]) { 
    newArray.push({ toto:Obj["toto"][k],titi:Obj["titi"][k] }); 
} 
1

Da die Längen des inneren Arrays gleich sind, soll einen Wert von jedem Array einfach Schleife durch sie in der Lage sein, und fügt (für jeden Iteration) in ein neues Array:

// Your input 
var input = {toto:[12,13,15],titi:[45,12,34]}; 
// An array to store your output 
var output = []; 

// Since your inner arrays are of equal size, you can loop through them 
// as follows 
for(var i = 0; i < input.toto.length; i++){ 
    output.push({ toto: input.toto[i], titi: input.titi[i]}); 
} 

Sie einen working example of this here sehen können und was die output Array wie unten aussieht:

enter image description here

1

Eine generische Ansatz

var object = { toto: [12, 13, 15], titi: [45, 12, 34] }, 
 
    newArray = function (o) { 
 
     var keys = Object.keys(o), 
 
      l = keys.reduce(function (r, a) { return Math.max(r, o[a].length); }, 0), 
 
      i = 0, 
 
      t, 
 
      result = []; 
 

 
     while (i < l) { 
 
      t = {}; 
 
      keys.forEach(function (k) { t[k] = o[k][i]; }); 
 
      result.push(t); 
 
      i++; 
 
     } 
 
     return result; 
 
    }(object); 
 

 
document.write('<pre>' + JSON.stringify(newArray, 0, 4) + '</pre>');

Verwandte Themen