javascript - 将计数值添加到具有相同键值的对象(对象数组)

标签 javascript arrays loops

您好,我需要对对象数组进行复杂的迭代。我有这样的数组:

[ 
  { name: 'Jacob', lastName: 'Smith', dob: '1995-11-29' },
  { name: 'Jacob', lastName: 'Smith', dob: '1991-08-21' },
  { name: 'Ann', lastName: 'Smith', dob: '1995-11-29' },
  { name: 'Ann', lastName: 'Nansen', dob: '1983-01-01' },
  { name: 'Jacob', lastName: 'Smith', dob: '1985-06-15' },
  { name: 'Jacob', lastName: 'Smith', dob: '1995-11-29' },
  { name: 'Ann', lastName: 'Smith', dob: '2010-11-29' },
]

我想为每个对象添加 count 属性来计算具有相同名称和姓氏的对象...所以现在应该是:

[ 
  { name: 'Jacob', lastName: 'Smith', count: 4 },
  { name: 'Ann', lastName: 'Smith', count: 2 },
  { name: 'Ann', lastName: 'Nansen', count: 1' },
]

最佳答案

您可以使用Array.reduceObject.values

  • 转换对象中的数组,其中键为名称,姓氏组合,值为结果对象。
  • 从对象中获取所有值作为最终结果

let arr = [{ name: 'Jacob', lastName: 'Smith', dob: '1995-11-29' },{ name: 'Jacob', lastName: 'Smith', dob: '1991-08-21' },{ name: 'Ann', lastName: 'Smith', dob: '1995-11-29' },{ name: 'Ann', lastName: 'Nansen', dob: '1983-01-01' },{ name: 'Jacob', lastName: 'Smith', dob: '1985-06-15' },{ name: 'Jacob', lastName: 'Smith', dob: '1995-11-29' },{ name: 'Ann', lastName: 'Smith', dob: '2010-11-29' }];

let result = Object.values(arr.reduce((a,{name, lastName}) => {
  let key = `${name}_${lastName}`;
  a[key] = a[key] || {name, lastName, count : 0};
  a[key].count++;
  return a;
}, {}));

console.log(result);

关于javascript - 将计数值添加到具有相同键值的对象(对象数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55828673/

相关文章:

c++ - 如何在 for 循环中编写此表?

javascript - 比较数组中是否有重复数字的函数

javascript - 如何将 'Prevent this page from creating additional dialogs' 默认为 "OK"选项

javascript - 创建弹出菜单/侧边栏菜单时出现问题

javascript 程序停止为大值工作

jquery - 如何使用 jQuery 从数组中的元素中检索值?

python - 如何优化 Python 中的嵌套 for 循环

c - 不正确的循环 - CS50 Mario

python - 如何在 python 中拆分具有多个条件的字符串?

javascript - Vue.js - 组件缺少模板或渲染功能