javascript - 如何通过特定对象键对数组中的值求和?

标签 javascript arrays object ecmascript-6 filter

我有一个 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/

相关文章:

c++ - 策略数组类设计包装器

ios - 无法将数组添加到具有空数组的字典中

javascript - 仅将组中的一个选择添加到数组

javascript - TinyMCE 吸收我的事件

javascript - jQuery UI 自动完成停止工作

javascript - 仅使用对象的引用从数组中删除对象

java - transient 对象是否可以免受双重检查锁定的影响?

java - Java运行时如何获取变量声明的类型?

javascript - 有没有办法使用像 React 这样的前端框架在浏览器中运行 Python 脚本客户端?

javascript - 由于 jquery 脚本,Bootstrap 折叠按钮不起作用