【问题标题】:how to loop over an array of object and count how many repeating values exist?如何遍历对象数组并计算存在多少重复值?
【发布时间】:2019-08-22 19:37:10
【问题描述】:

假设我有一个包含不同键的对象列表,其中一个是 name

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

最终结果应该是:

var uniquePartNamesWithCount = [{name: "HYD. CYLINDER", count: 2}, {name: "pelle", count: 2}, {name: "1212", count: 1}]

我知道如何将唯一名称推送到数组中,但是如何设法添加计数器

【问题讨论】:

  • 使用Array#reduce方法

标签: javascript arrays object for-loop counter


【解决方案1】:

这可以满足您的需求:

// Declarations
var resulttemp = [
  {name: "HYD. CYLINDER"},
  {name: "pelle"},
  {name: "HYD. CYLINDER"},
  {name: "1212"},
  {name: "pelle"}
];
const counts = {}
const uniquePartNamesWithCount = []

// Get sums
for (let obj of resulttemp){
  if(counts[obj.name]){ counts[obj.name]++;} 
  else{counts[obj.name] = 1 }
}

// Add objects to final array
const keys = Object.keys(counts);
for(let key of keys){
  let obj = {};
  obj[key] = counts[key];
  uniquePartNamesWithCount.push(obj);
}

// Print results
console.log(uniquePartNamesWithCount);

【讨论】:

    【解决方案2】:

    一种解决方案是使用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));
    .as-console {background-color:black !important; color:lime;}
    .as-console-wrapper {max-height:100% !important; top:0;}

    如果你需要按计数器排序的最终数组,那么你可以这样做:

    console.log( Object.values(res).sort((a, b) => b.count - a.count) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2023-03-22
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多