我有一个 js 对象数组,如下所示:
var objArr = [
{"Country": "US", "City": "MyCity1", "2017-07-12": "1", "2017-07-13": "2"},
{"Country": "US", "City": "MyCity2", "2017-07-12": "2", "2017-07-13": "2"},
{"Country": "CN", "City": "MyCity1", "2017-07-12": "5", "2017-07-13": "7"},
{"Country": "CN", "City": "MyCity2", "2017-07-12": "5", "2017-07-13": "7"}
]
我想创建一个新数组,其中国家是独一无二的,但日期也应该相加。
{"Country": "US", "2017-07-12": "3", "2017-07-13": "4"},
{"Country": "CN", "2017-07-12": "10", "2017-07-13": "14"}
^^^^ ^^^^ ^^^^
我很难理解它。
我必须先过滤,以某种方式减少它,重新映射它,......我不知道开始吗?
任何帮助将不胜感激,谢谢!
最佳答案
使用Array.reduce
,检查当前国家的对象是否存在,如果存在,循环遍历Object.keys
要更新值,如果没有,请推送一个新值:
编辑 : 如果你不想要 City 你可以解构它 {City, ...curr}
var objArr = [
{ Country: "US", City: "MyCity1", "2017-07-12": "1", "2017-07-13": "2" },
{ Country: "US", City: "MyCity2", "2017-07-12": "2", "2017-07-13": "2" },
{ Country: "CN", City: "MyCity1", "2017-07-12": "5", "2017-07-13": "7" },
{ Country: "CN", City: "MyCity2", "2017-07-12": "5", "2017-07-13": "7" }
];
var result = objArr.reduce((acc, {City, ...curr}) => {
const ndx = acc.findIndex(e => e.Country === curr.Country);
if (ndx > -1) {
const [country, ...keys] = Object.keys(curr);
keys.forEach(k => {
acc[ndx][k] = +acc[ndx][k] + +curr[k];
});
} else {
acc.push(curr);
}
return acc;
}, []);
console.log(result);
关于javascript - 如何通过特定对象键对数组中的值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60491517/