基于对象数组创建对象

时间:2018-01-28 17:00:02

标签: javascript

我想使用这个对象数组:

[
{ 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
    }
  });
}

它只返回所需格式的最后数据。 我怎样才能做到这一点?

2 个答案:

答案 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);