Ich arbeite an einem Problem, wo ich ein Array von Objekten von einem Formular in ein anderes gruppieren muss.Javascript Objekt Reorganisation mit Leistung
Ein Beispiel ist besser als 1000 Worte:
var initialData = [
{
house: { id: 1, text: "white" },
room: { id: 1, text: "red" },
price: 2.1
},
{
house: { id: 1, text: "white" },
room: { id: 2, text: "blue" },
price: 3.1
},
{
house: { id: 1, text: "white" },
room: { id: 3, text: "red" },
price: 5.8
},
{
house: { id: 2, text: "black" },
room: { id: 1, text: "yellow" },
price: 9.1
},
{
house: { id: 2, text: "black" },
room: { id: 2, text: "green" },
price: 7.7
},
];
Und das neue Objekt sollte wie folgt aussehen:
var finalObject = {
houses: [
{
id: 1, text: "white",
rooms: [
{ id: 1, text: "red", price: "2.1" },
{ id: 2, text: "blue", price: "3.1" },
{ id: 3, text: "red", price: "5.8" }
]
},
{
id: 2, text: "black",
rooms: [
{ id: 1, text: "yellow", price: "9.1" },
{ id: 2, text: "green", price: "7.7" }
]
}
]
};
Ich einzigartige Häuser jeweils mit all ihren Zimmern und auch hinzufügen finden müssen Preis vom ursprünglichen Objekt im Zimmer.
Ich frage mich, welcher wäre der beste Weg, dies zu tun, da ich eine riesige Menge an Elementen haben werde?
Ich habe einige Ideen mit mehreren Schleifen, aber mir scheint es ein bisschen zu komplex meine Lösung.
Update: meine Frage ist nicht das gleiche wie der eine Kandidat für die Duplizierung, weil ich nicht lodash verwende, und mein Objekt muss ein wenig refaktoriert werden, nicht nur neu gruppiert.
Mögliche Lösung (inspiriert von @ Gael Antwort)
finalObject = {}
for (var i = 0; i < initialData.length; ++i) {
var item = initialData[i];
var id = item.house.id;
if(!finalObject[id]) {
finalObject[id] = item.house;
finalObject[id].rooms = [];
}
var room = item.room;
room.price = item.price;
finalObject[id].rooms.push(room);
}
console.log(finalObject);
Es sieht aus wie Sie nur eine Schleife benötigen würde. Du könntest jedes Element durchgehen und es zu einem neuen Array hinzufügen, das basierend auf dem Haus gruppiert wird, dann Räume und dann ID. – victor
Sie sollten diese Ideen und was Sie bisher geschrieben haben, um das Problem zu lösen. – chazsolo
Mögliches Duplikat von [Gruppierung von Objekten nach Schlüssel] (https: // stackoverflow.com/questions/40774697/how-to-group-array-of-objects-by-key) –