使用这样的对象列表:
var products = [
{productName: "Soap", qty: 2},
{productName: "Shampoo", qty: 3},
{productName: "Spray", qty: 1}
];
返回此列表中具有最高qty
的对象的最有效方法是什么? (例如,使用for循环的替代方法)
如果有两个具有相同qty
的对象,则只需返回列表中具有最高qty
的第一个对象即可。
答案 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
个文档