我有一个很好的谜题: 我有以下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)的数据并制作具有价格或日期的图表 谢谢!
答案 0 :(得分:2)
你可以尝试这样的事情。使用数组上的reduce函数来填充id映射的汽车的hashmap。并且键上的地图,以获得具有相同ID的所有汽车物品的数组。
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;
答案 1 :(得分:0)
另一种解决方案
function removeDuplicates(myArr, prop) {
return myArr.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
});
}
答案 2 :(得分:0)
也是一个不错的简短解决方案:
cars = cars.filter((v, i, a) => a.findIndex(t => (t.card_id === v.id)) === i);