Tôi đang khắc phục sự cố trong đó tôi phải nhóm một mảng các đối tượng từ một biểu mẫu này sang dạng khác.Sắp xếp lại đối tượng Javascript với hiệu suất
Một ví dụ là tốt hơn so với 1000 từ:
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
},
];
Và đối tượng mới sẽ trông như thế này:
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" }
]
}
]
};
tôi phải tìm nhà độc đáo với tất cả các phòng của họ và cũng để thêm mỗi giá từ vật thể ban đầu trong phòng.
Tôi tự hỏi đó sẽ là cách tốt nhất để làm điều này vì tôi sẽ có một số lượng lớn các yếu tố?
Tôi có một số ý tưởng với nhiều vòng lặp, nhưng đối với tôi, có vẻ như một giải pháp quá phức tạp của tôi.
Cập nhật: câu hỏi của tôi không giống như một ứng cử viên cho sao chép vì tôi không sử dụng lodash, và đối tượng của tôi phải được tái cấu trúc một chút, không chỉ tập hợp lại.
giải pháp có thể xảy ra (lấy cảm hứng từ @ câu trả lời Gael của)
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);
Dường như bạn sẽ chỉ cần một vòng lặp. Bạn có thể đi qua từng phần tử và thêm nó vào một mảng mới, nhóm nó dựa trên ngôi nhà, sau đó là các phòng, sau đó là id. – victor
Bạn nên đăng những ý tưởng đó và những gì bạn đã viết cho đến nay để giải quyết vấn đề. – chazsolo
Bản sao có thể có của [Cách nhóm mảng đối tượng theo khóa] (https: // stackoverflow.com/questions/40774697/how-to-group-array-of-objects-by-key) –