过滤具有相同id的许多数组中的对象

时间:2016-05-04 09:07:08

标签: javascript angularjs

我有一个很好的谜题: 我有以下JavaScript数组

var json = {
  'cars': [
    {
      "car_id": "1",
      "price": "925",
      "full_option": "1100"
      "date_price": 04-05-2016
      ...    
    }, 
    {
      "car_id": "1",
      "price": "990",
      "full_option": "1200"
      "date_price": 04-05-2015
      ....
    },
    {
      "car_id": "2",
      "price": "500",
      "full_option": "700"
      "date_price": 04-05-2014
      ....
    },
    {
      "car_id": "2",
      "price": "900",
      "full_option": "1000"
      "date_price": 04-05-2013
      ....
    },
    ---more cars-------     
  ]
}

我想得到不同的数组:

如果我将变量“i”视为我表中不同cars_id的数量

for(var i=1; i'<'numberOfDifferent_cars_id'<'i++){
    array[i]= datas based on same id
  }

我的目标是比较同一对象(cars_id)的数据并制作具有价格或日期的图表  谢谢!

3 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情。使用数组上的reduce函数来填充id映射的汽车的hashmap。并且键上的地图,以获得具有相同ID的所有汽车物品的数组。

&#13;
&#13;
var json = {
  'cars': [{
    "car_id": "1",
    "price": "925",
    "full_option": "1100"
  }, {
    "car_id": "1",
    "price": "990",
    "full_option": "1200"
  }, {
    "car_id": "2",
    "price": "500",
    "full_option": "700"
  }, {
    "car_id": "2",
    "price": "900",
    "full_option": "1000"
  }, {
    "car_id": "4",
    "price": "900",
    "full_option": "1000"
  }]
};
console.log(json);

var car_array = json.cars.reduce((prev, t, index, arr) => {
  if (typeof prev[t.car_id] === 'undefined') {
    prev[t.car_id] = [];
  }
  prev[t.car_id].push(t);
  return prev;
}, {});



Object.keys(car_array).forEach(i => {
  var array_of_cars_with_same_id = car_array[i];
  //use this array to do some stuff
  console.log(array_of_cars_with_same_id);
});
&#13;
&#13;
&#13;

答案 1 :(得分:0)

另一种解决方案

function removeDuplicates(myArr, prop) {
    return myArr.filter((obj, pos, arr) => {
        return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
    });
}

source

答案 2 :(得分:0)

也是一个不错的简短解决方案:

cars = cars.filter((v, i, a) => a.findIndex(t => (t.card_id === v.id)) === i);