簡體   English   中英

在對象數組中創建具有相同鍵平均值的新數組

[英]Create new array with Average of same keys in an array of objects

我有一個 object 數組,如下所示:

var arr=[ {"jan":2},{"jan":5},{"feb":3},{"feb":1}];

它們將是 N 個具有任意組合鍵的對象 jan 和 feb 只是一個示例。

我需要找到具有相似鍵的對象的平均值,以便生成的數組如下所示:

var newArr=[{"jan":3.5},{"feb":2}];

希望在不使用 JavaScript 的減少方法的情況下實現這一目標。

我試圖用相似的鍵分離出對象,以便對它們求和並對它們進行平均並推入一個新的數組。 像這樣的東西:

arr.forEach(a=>{
   console.log(Object.keys(a))
   console.log(arr.filter(ar=>ar.hasOwnProperty(Object.keys(a)[0])))
})

但它會在控制台中為相同的鍵創建多個組。

[ {"jan":2},{"jan":5} ]
[ {"jan":2},{"jan":5} ]
[ {"feb":3},{"feb":1} ]
[ {"feb":3},{"feb":1} ]

不使用reduce的代碼。 雖然有點長但很容易理解我們使用了兩個對象,一個是存儲鍵的計數,另一個是存儲鍵的總數。 結果 object 具有平均值。

 var arr=[ {"jan":2},{"jan":5},{"feb":3},{"feb":1}]; var count = {}; var total = {}; arr.forEach(obj => { var key = Object.keys(obj)[0]; if(count.hasOwnProperty(key)){ count[key]=count[key]+1; } else { count[key]=1; } if(total.hasOwnProperty(key)){ total[key]=total[key]+obj[key]; } else { total[key]=obj[key]; } }) var result = {} Object.keys(total).forEach(key => { result[key] = total[key]/count[key]; }) console.log(result)

類似於上面的答案,但使用了 map:

 var arr=[ {"jan":2},{"jan":5},{"feb":3},{"feb":1}]; let map = new Map(); let keyCount = {}; arr.forEach(e => { let key = Object.keys(e)[0]; let value = Object.values(e)[0]; if (map.get(key).== undefined) { map,set(key. map;get(key) + value); keyCount[key] = keyCount[key] + 1. } else { map,set(key; value); keyCount[key] = 1; } }); let newArr = []. for (let e of map;entries()) { let obj = {}; obj[e[0]] = e[1] / keyCount[e[0]]. newArr;push(obj). } console;log(newArr);

暫無
暫無

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

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