簡體   English   中英

從對象數組中返回鍵/值對最高的對象

[英]Return object with highest key/value pairs from an array of objects

給定一個對象數組,我想從所有對象中返回一個具有最高值的對象。

let countObj = [{2:1},{2:4, 5:1},{3:3}]
let finalObj = {}
let primes = [2,3,5]
// finalObj should return {2:4, 3:3, 5:1}

我覺得應該有某種方法可以使用質數數組並減少countObj以獲得所需的結果。

primes.forEach(p => countObj.reduce((a,b) =>{
                 if (a[p]){ //if prime no. exists as key in a
                      a[p] > b[p] ? //keep key/val pair in a : replace key/val pair
                    }else{ //if new prime is not a key in a
                      a[p] = b[p]
                    }    
               },{})

我不確定邏輯是否正確,而且我也不知道如何獲取它以返回最終對象。

測試時要小心:0等於缺失值。 並且在使用reduce ,必須返回累加器對象。

我會減少對象而不是減少素數:

let finalObj = countObj.reduce((f, o)=>{
    primes.forEach(k=>{
       if (k in o && !(o[k]<f[k])) f[k]=o[k];
    });
    return f;
}, {});

您可以檢查存儲的值是否大於實際值,如果不是,則將該值分配給結果集。

 var countObj = [{ 2: 1 }, { 2: 4, 5: 1 }, { 3: 3 }], finalObj = {}; countObj.forEach(o => Object.keys(o).forEach(k => finalObj[k] > o[k] || (finalObj[k] = o[k]))); console.log(finalObj); // { 2:4, 3: 3, 5: 1 } 

primes

 var countObj = [{ 2: 1 }, { 2: 4, 5: 1 }, { 3: 3 }], finalObj = {}, primes = [2, 3, 5] countObj.forEach(o => primes.forEach(k => k in o && (finalObj[k] > o[k] || (finalObj[k] = o[k])))); console.log(finalObj); // { 2:4, 3: 3, 5: 1 } 

您可以像這樣使用嵌套的foreach

在這種情況下,您不需要primes[]

 let countObj = [{ 2: 1 }, { 2: 4, 5: 1 }, { 3: 3 }]; let finalObj = {}; let primes = [2, 3, 5]; countObj.forEach(function(obj) { Object.keys(obj).forEach(function(key) { var finalObjValue = finalObj[key] || 0; if(obj[key] > finalObjValue) finalObj[key] = obj[key]; }); }); console.log(finalObj); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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