2016-09-09 61 views
0

我有一個對象數組,每個對象包含其他'子對象'。我需要返回具有最大「質量」屬性的子對象。如何從數組中獲得最大屬性的對象?

以下代碼會註銷所有子對象。我如何才能退回質量最好的那個?

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);

回答

1

雖然其他.reduce答案很可能使你需要什麼,如果商店數組包含多個ob ject - 不知道如果這是你想要/需要的東西 - 你可以使用這個:

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); 
} 
+0

謝謝!是的,我的故事包含不止一個商店(對不起,如果在原始代碼片段中不清楚,我想保持簡短)。也提出了第一個.reduce答案。 – brunodbo

2

你可以做到這一點使用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需要參數 - 一個是CA第二個是你開始的初始項目種子。在這種情況下,由於我們只檢查一個扁平值,所以空對象的種子會正常工作,因爲從屬性quality中取出時它將返回undefined,並且這將比任何其他產品少。但是,對於更復雜的結構或比較,您可能需要將陣列中的實際項目作爲種子。

0

我想這可以歸結爲一個簡單的Array.prototype.sort種事情:

products.sort((a, b) => b.quality - a.quality)[ 0 ]; 
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);

相關問題