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