【问题标题】:How to get the count of Value repetition under array of objects in javascript如何在javascript中获取对象数组下的值重复计数
【发布时间】:2023-03-24 17:35:02
【问题描述】:

我有一个有一些重复计数的数组。我想知道那个重复的次数。 我的数组是这样的:

var array = [
    { asset: "A", sector: "Hospital" },
    { asset: "B", sector: "Hardware" },
    { asset: "C", sector: "Networking" },
    { asset: "D", sector: "Networking" },
    { asset: "E", sector: "Food" },
    { asset: "F", sector: "Hospital" },
    { asset: "G", sector: "Hardware" },
    { asset: "H", sector: "Industrial" },
    { asset: "I", sector: "Transport" },
    { asset: "J", sector: "Hardware" },
    { asset: "K", sector: "Networking" },
    { asset: "L", sector: "Transport" }
]

现在我希望重复计数也像这样按如下排序:

final_array = [
    { sector: 'Hardware', count: 3 },
    { sector: 'Networking', count: 3 },
    { sector: 'Hospital', count: 2 },
    { sector: 'Transport', count: 2 },
    { sector: 'Food', count: 1 },
    { sector: 'Industrial', count: 1 }
]

我不知道从哪里可以做到这一点。我有很多链接,但它们解决了数组下的重复而不是对象数组。

我使用一种方法,但不能解决我的问题

var finalD = [];
c.forEach(x => {
    if (isSectorExists(x.sector, finalD) == true) {
        //Here I don't know how I will increase the counter.
    } else {
        finalD.push({ sector: x.sector, count: 1 });
    }
});

var isSectorExists = (sector, arr) => {
    return arr.some(function(el) {
        return el.sector === sector;
    });
};

我知道我的方法很长。是否有人有最好和最简单的方法来完成这种任务。任何帮助真的很感激。提前致谢

【问题讨论】:

标签: javascript arrays object ecmascript-6


【解决方案1】:

您可以构建一个对象counts,将扇区名称作为键,并将计数存储为值,遍历您的数组并更新这些计数,然后最终获得该counts 对象的值。

var array = [
      { asset: "A", sector: "Hospital" },
      { asset: "B", sector: "Hardware" },
      { asset: "C", sector: "Networking" },
      { asset: "D", sector: "Networking" },
      { asset: "E", sector: "Food" },
      { asset: "F", sector: "Hospital" },
      { asset: "G", sector: "Hardware" },
      { asset: "H", sector: "Industrial" },
      { asset: "I", sector: "Transport" },
      { asset: "J", sector: "Hardware" },
      { asset: "K", sector: "Networking" },
      { asset: "L", sector: "Transport" }
];
            
            
var counts = array.reduce((m, c) => {
    if (c.sector in m) m[c.sector].count += 1;
    else m[c.sector] = { sector: c.sector, count: 1};
    return m;
}, {});

let finalArray = Object.values(counts).sort((a, b) => b.count - a.count);

console.log(finalArray);

这将在线性时间内得到计数(而不是为每个元素调用isSectorExists,这会使它O(n^2)

【讨论】:

  • 感谢您提供宝贵且最短的解决问题的方法。非常感谢您的帮助
猜你喜欢
  • 2021-09-14
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多