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

hei*_*584 0 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' },
]
Run Code Online (Sandbox Code Playgroud)

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

[ 
  { name: 'Jacob', lastName: 'Smith', count: 4 },
  { name: 'Ann', lastName: 'Smith', count: 2 },
  { name: 'Ann', lastName: 'Nansen', count: 1' },
]
Run Code Online (Sandbox Code Playgroud)

Nik*_*wal 5

您可以使用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);
Run Code Online (Sandbox Code Playgroud)