我正在處理一個問題,即必須將對象數組從一個表單組合到另一個表單中。具有性能的Javascript對象重組
一個例子是優於1000個字:
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
},
];
而且新的對象應該是這樣的:
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" }
]
}
]
};
我一定要找到他們所有的房間獨特的民居建築,並增加各房間內最初物體的價格。
我想知道哪個是最好的方法來做到這一點,因爲我會有大量的元素?
我對多重循環有一些想法,但對我來說這似乎有點太複雜我的解決方案。
更新:由於我不使用lodash,因此我的問題與重複的候選人不同,我的對象必須重構一點,而不是重新組合。
可能的解決方案(由@啓發蓋爾的答案)
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);
它看起來像你只需要一個循環。你可以通過每個元素並將其添加到一個新的數組,然後根據房屋,房間,然後id進行分組。 – victor
您應該發佈這些想法以及迄今爲止寫的內容來解決問題。 – chazsolo
[如何按鍵組織對象數組](https:// stackoverflow。com/questions/40774697/how-to-group-array-of-objects-by-key) –