[英]How to get object with largest property from array?
我有一个对象数组,每个对象都包含其他“子对象”。 我需要返回具有最大“品质”属性的子对象。
下面的代码注销所有子对象。 如何只退回质量最高的那一款?
var maxQuality = function(Arr) { Arr.forEach(function(obj, index) { Math.max.apply(Math, obj.products.map(function(subObj) { console.log(subObj); })) }); }, store = [ { products: [ { quality: 1, info: 'info 1' }, { quality: 2, info: 'info 2' }, { quality: 3, info: 'info 3' } ] } ], maxQualityProduct = maxQuality(store);
您可以使用数组上的reduce()
方法做到这一点
var products = [ { quality: 1, info: 'info 1' }, { quality: 2, info: 'info 2' }, { quality: 3, info: 'info 3' } ]; var highest = products.reduce(function(prev, current) { return prev.quality > current.quality ? prev : current }, {}); console.log(highest);
请注意, reduce
需要两个参数-一个是回调,第二个是您以种子开始的初始项。 在这种情况下,由于我们仅检查一个固定值,因此空对象的种子将正常工作,因为从中获取属性quality
时,它将返回undefined
,并且将小于其他任何乘积。 但是,对于更复杂的结构或比较,您可能需要将数组中的实际项目作为种子。
尽管另一个.reduce
答案可能会满足您的需要,但是如果存储数组包含多个对象-不确定是否是您想要/需要的对象-您可以使用以下方法:
var maxQuality = function(storeArray) {
function highestQuality(prev, curr) {
return prev.quality > curr.quality ? prev : curr
}
return storeArray.map(function(obj) {
return obj.products.reduce(highestQuality)
}).reduce(highestQuality);
}
我想这可以归结为一个简单的Array.prototype.sort
类的东西:
products.sort(( a, b ) => b.quality - a.quality )[ 0 ];
您可以使用以下代码段:
var maxQuality = function(Arr) { var result = undefined; for (var obj of store) { for (var product of obj.products) { if (!result || product.quality > result.quality) { result = product; } } } return result; }, store = [ { products: [ { quality: 1, info: 'info 1' }, { quality: 2, info: 'info 2' }, { quality: 3, info: 'info 3' } ] } ], maxQualityProduct = maxQuality(store); console.log(maxQualityProduct);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.