javascript - 在对象数组中创建具有相同键平均值的新数组
问题描述
我有一个对象数组,如下所示:
var arr=[ {"jan":2},{"jan":5},{"feb":3},{"feb":1}];
它们将是 N 个具有任意组合键的对象 jan 和 feb 只是一个示例。
我需要找到具有相似键的对象的平均值,以便生成的数组如下所示:
var newArr=[{"jan":3.5},{"feb":2}];
希望在 JavaScript 中不使用 reduce 方法来实现这一点。
我试图用相似的键分离出对象,以便对它们求和并对它们进行平均并推入一个新的数组。像这样的东西:
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} ]
解决方案
类似于上面的答案,但使用了地图:
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);
推荐阅读
- android - 如何将条目从 xml 传递到 kt?
- python - 如何在内联命令中使用海象运算符?
- javascript - 使用 axios 从 REST 端点获取 JSON - ReactJS
- javascript - 尝试从我自己的 API 获取数据时出现“未定义”
- python - 根据第 90 个百分位数内的值过滤掉数据框
- c++ - Concert 技术中的决策变量声明(c++ 和 cplex)
- haskell - Haskell 在防止缓冲区溢出方面有多安全?
- firebase - 如何仅授予管理员帐户访问权限以创建新帐户,而不是在创建新帐户后将其注销?
- javascript - 使用 JSDoc 从另一个模块引用 @class
- java - 如何使用 LSP4J 在 Java 中重用现有的语言服务器 (LSP)