我的数据是这样的对象数组:
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; })
但这会从整个数组中返回一个对象。我还尝试过循环浏览品牌和型号列表,并仅选择最大年份,但我无法做到这一点。
另一种选择是通过 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;
});
}
)
关于javascript - 从 JavaScript 中的对象数组中选择特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488786/