对象列表:具有最高属性值的返回对象

时间:2016-09-13 09:43:11

标签: javascript jquery

使用这样的对象列表:

var products = [
  {productName: "Soap", qty: 2}, 
  {productName: "Shampoo", qty: 3}, 
  {productName: "Spray", qty: 1}
];

返回此列表中具有最高qty的对象的最有效方法是什么? (例如,使用for循环的替代方法)

如果有两个具有相同qty的对象,则只需返回列表中具有最高qty的第一个对象即可。

3 个答案:

答案 0 :(得分:4)

您应该使用sort然后检索元素。

products.sort(function(a,b){
     return b.qty - a.qty
})[0]

答案 1 :(得分:3)

您可以使用Array#reduce并获得数量最多的第一个。

此解决方案只需要一次迭代:O(n)。

var products = [{ productName: "Soap", qty: 2 }, { productName: "Shampoo", qty: 3 }, { productName: "Spray", qty: 1 }],
    highest = products.reduce(function (r, a, i) {
        return !i || a.qty > r.qty ? a : r;
    }, undefined);

console.log(highest);

答案 2 :(得分:1)

我认为最好的方法是排序然后检索元素。因为sort在引擎级别上进行了优化,并且效率最高。我认为,95%的时候,它会使用MergeSort。

product.sort(function(a, b) {
    return a.qty - b.qty 
})

这将按qty升序排序元素。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

上的Array.prototype.sort个文档