2017-01-12 7 views
1

オブジェクトの配列が与えられた場合、すべてのオブジェクトから最も高い値を持つオブジェクトを返したいと思います。オブジェクトの配列から最も高いキーと値のペアを持つオブジェクトを返します

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] 
        }  
       },{}) 

ロジックが正しいかどうかわかりませんが、最終的なオブジェクトを返す方法がわかりません。

答えて

2

を必要としません。

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 }

2

テストには注意してください.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; 
}, {}); 
+0

ではなぜ削除されません! >作品をめくる? o [k]またはf [k]が未定義のときには同じではないので、(k in o &&(o [k]> f [k]))f [k] = o [k] –

+1

@IsabellaChen –

0

あなたはこのようなネストされた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);

+0

これは負の数値では機能しません(これはOPに関係するかもしれませんが、あなたには分かりません) –

+0

@DenysSéguretなぜですか? – Weedoze

+0

彼らは> 0ではないので、{3:3}ではなく{3:-1}でテストしてください。 –

関連する問題