簡體   English   中英

如何從數組中獲取具有最大屬性的對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM