在javascript中从对象数组中选择一个特定的值

Selecting a specific value from an array of objects in javascript

本文关键字:一个 javascript 对象 数组 选择      更新时间:2023-09-26

我的数据是一个像这样的对象数组:

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目标。

谢谢!

查看下划线的groupBy函数。你应该能够使用它并将其与map链接在一起

_.map(
    _.groupBy(cars, function(car) {
        return car.make + car.model;
    }),
    function(years, makeModel) {
        return _.max(years, function(year) {
            return year.year;
        });
    }
) 

JSFiddle

你可以这样做

 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));
}
http://jsfiddle.net/btevfik/BEx5a/