从对象的数组中选择特定的值在JavaScript
问题描述:
我有一个对象的一个这样的数组数据:从对象的数组中选择特定的值在JavaScript
var cars = [ {"year": 2003, "make": "Toyota", "model": "Tercel"}
, {"year": 2009, "make": "Toyota", "model": "Tercel"}
, {"year": 1999, "make": "Honda", "model": "Civic"}
, {"year": 2002, "make": "Honda", "model": "Civic"}
, {"year": 2004, "make": "Honda", "model": "Civic"}
, {"year": 2007, "make": "Honda", "model": "Accord"}
...
]
我想拔出只有最新的各品牌和型号,使所选阵列的样子:
var selectedCars = [ {"year": 2009, "make": "Toyota", "model": "Tercel"}
, {"year": 2004, "make": "Honda", "model": "Civic"}
, {"year": 2007, "make": "Honda", "model": "Accord"}
]
我知道我可以过滤器,例如:
var selectedCars = _.max(cars, function(d) { return d.year; })
但返回SI在整个数组之外的对象。我也尝试过循环制作和模型列表,并选择了最大年份,但我无法完成这项工作。
另一种选择是通过类似d3.nest()以make和model作为键来嵌套数据,但是我不确定如何返回到我的selectedCars
目标。
谢谢!
答
检出Underscore's groupBy函数。您应该能够使用与map
_.map(
_.groupBy(cars, function(car) {
return car.make + car.model;
}),
function(years, makeModel) {
return _.max(years, function(year) {
return year.year;
});
}
)
+0
很好的答案,谢谢! – potterzot 2013-03-19 00:04:10
答
连锁它,你可以做这样的事情
var cars = [ {"year": 2003, "make": "Toyota", "model": "Tercel"}
, {"year": 2009, "make": "Toyota", "model": "Tercel"}
, {"year": 1999, "make": "Honda", "model": "Civic"}
, {"year": 2002, "make": "Honda", "model": "Civic"}
, {"year": 2004, "make": "Honda", "model": "Civic"}
, {"year": 2007, "make": "Honda", "model": "Accord"}
]
var carGroup = _.groupBy(cars, 'make');
for (var property in carGroup) {
if (carGroup.hasOwnProperty(property)) {
var selectedCar = _.max(carGroup[property], function(d) { return d.year; })
}
alert(JSON.stringify(selectedCar));
}
'_'是underscore.js? – 2013-03-18 23:24:15
'groupBy' make。选择每个组的最大对象(通过'map')。 “映射”所需的值。 – 2013-03-18 23:26:54