我想使用这个对象数组:
[
{ car: "bmw", model: "e46", price: "1000" },
{ car: "bmw", model: "e52", price: "2000" },
{ car: "bmw", model: "X5", price: "4000" },
{ car: "bmw", model: "X3", price: "4500" },
{ car: "audi", model: "A3", price: "1500"},
{ car: "audi", model: "A4", price: "2500"},
{ car: "audi", model: "TT", price: "2800"},
{ car: "audi", model: "A8", price: "3500"}
]
并将其转换为:
let cars = {
bmw: {
e46: "1000",
e52: "2000",
X5: "4000"
},
audi: {
A3: "1500",
A4: "2500",
TT: "2800",
A8: "3500"
}
}
这是我的代码:
let obj = {};
function order(arr) {
arr.forEach((e) => {
obj[e.car] = {
[e.model]: e.price
}
});
}
它只返回所需格式的最后数据。 我怎样才能做到这一点?
答案 0 :(得分:2)
您每次迭代都要分配obj[e.car]
,您应该每次迭代都添加一个项目
var arr = [
{ car: "bmw", model: "e46", price: "1000" },
{ car: "bmw", model: "e52", price: "2000" },
{ car: "bmw", model: "X5", price: "4000" },
{ car: "bmw", model: "e46", price: "1000" },
{ car: "audi", model: "A3", price: "1500"},
{ car: "audi", model: "A4", price: "2500"},
{ car: "audi", model: "TT", price: "2800"},
{ car: "audi", model: "A8", price: "3500"}
];
let obj = {};
function order(arr) {
arr.forEach((e) => {
if (!obj[e.car]){
obj[e.car] = {};
}
obj[e.car][e.model] = e.price;
});
}
order(arr);
console.log(obj);

答案 1 :(得分:0)
这是一种可以为您提供所需结果的替代方案。你可以试试这个..
var objsource=[
{ car: "bmw", model: "e46", price: "1000" },
{ car: "bmw", model: "e52", price: "2000" },
{ car: "bmw", model: "X5", price: "4000" },
{ car: "bmw", model: "e46", price: "1000" },
{ car: "audi", model: "A3", price: "1500"},
{ car: "audi", model: "A4", price: "2500"},
{ car: "audi", model: "TT", price: "2800"},
{ car: "audi", model: "A8", price: "3500"}
];
var car={};
var model={};
objsource.forEach(function(objs){
if(!car.hasOwnProperty(objs.car)){
car[objs.car]="";
}
});
Object.keys(car).forEach(function(cars){
objsource.forEach(function(objs){
if(cars==objs.car){
model[objs.model]=objs.price;
car[cars]=model;
}
});
model={};
})
console.log(car);