如何遍历对象数组并计算存在多少个重复值?

Isa*_*eur 1 javascript arrays counter for-loop object

可以说我有一个带有不同键的对象列表,其中之一是name

var resulttemp = [{name: "HYD. CYLINDER"}, {name: "pelle"}, {name: "HYD. CYLINDER"}, {name: "1212"}, {name: "pelle"}]
Run Code Online (Sandbox Code Playgroud)

最终结果应为:

var uniquePartNamesWithCount = [{name: "HYD. CYLINDER", count: 2}, {name: "pelle", count: 2}, {name: "1212", count: 1}]
Run Code Online (Sandbox Code Playgroud)

我知道如何将唯一名称推入数组,但是如何添加计数器

Shi*_*rsz 6

一种解决方案是使用Array.reduce()生成一个对象,该对象将保存每个名称以及与之相关的计数器。最后,您可以使用Object.values()获得所需的数组。

var input = [
  {name: "HYD. CYLINDER"},
  {name: "pelle"},
  {name: "HYD. CYLINDER"},
  {name: "1212"},
  {name: "pelle"}
];

let res = input.reduce((acc, {name}) =>
{
    acc[name] = acc[name] || ({name, count: 0});
    acc[name].count++;
    return acc;    
}, {});

console.log(Object.values(res));
Run Code Online (Sandbox Code Playgroud)
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Run Code Online (Sandbox Code Playgroud)

如果您需要按计数器排序的最终数组,则可以执行以下操作:

console.log( Object.values(res).sort((a, b) => b.count - a.count) );
Run Code Online (Sandbox Code Playgroud)