【问题标题】:Typescript/Javascript Count duplicate values based on 2 parametersTypescript/Javascript 根据 2 个参数计算重复值
【发布时间】:2021-10-13 14:45:52
【问题描述】:

我很难操纵我的数据以在条形图中有用。

这是在仅使用我需要的属性进行映射后得到的数据:

const data = [
    {
        date: "2021-10-10",
        serialNumber: "4A6211B92417A7DB"
    },
    {
        date: "2021-10-11",
        serialNumber: "5B6211B92417A7DB"
    },
    {
        date: "2021-10-12",
        serialNumber: "5B6211B92417A7DB"
    },
    {
        date: "2021-10-12",
        serialNumber: "4A6211B92417A7DB"
    },
    {
        date: "2021-10-12",
        serialNumber: "4A6211B92417A7DB"
    },
    {
        date: "2021-10-12",
        serialNumber: "4A6211B92417A7DB"
    }
];

我想要的是以下内容:根据每个 serialNumber 的日期计算重复项。它看起来像这样:

const solution = [
    {
        serialNumber: "4A6211B92417A7DB",
        count: 3,
        date: "2021-10-12",
    },
    {
        serialNumber: "5B6211B92417A7DB",
        count: 1,
        date: "2021-10-12",
    },
    {
        serialNumber: "5B6211B92417A7DB",
        count: 1,
        date: "2021-10-11",
    },
    {
        serialNumber: "5B6211B92417A7DB",
        count: 1,
        date: "2021-10-10",
    },
]

我想出了以下几点:

array.forEach(function(obj: any) {
       const key = JSON.stringify(obj.serialNumber)
       counts[key] = (counts[key] || 0) + 1
    });

但是它只根据 1 个参数计算它们,我还需要每个日期的计数。你是怎么做到的?

【问题讨论】:

    标签: javascript typescript charts


    【解决方案1】:

    您可以使用“分组依据”和由日期和序列号组成的复合键。这里使用for..of循环累加到一个对象中,使用template literal创建复合键,然后分配Object.values()作为结果。

    const data = [{ date: '2021-10-10', serialNumber: '4A6211B92417A7DB', }, { date: '2021-10-11', serialNumber: '5B6211B92417A7DB', }, { date: '2021-10-12', serialNumber: '5B6211B92417A7DB', }, { date: '2021-10-12', serialNumber: '4A6211B92417A7DB', }, { date: '2021-10-12', serialNumber: '4A6211B92417A7DB', }, { date: '2021-10-12', serialNumber: '4A6211B92417A7DB', },];
    
    const counts = {};
    for (const datum of data) {
      const k = `${datum.date}_${datum.serialNumber}`;
      // using OR short circuit
      (counts[k] || (counts[k] = { ...datum, count: 0 })).count += 1;
      
      // alternativley with logical nullish assignment if available
      //(counts[k] ??= { ...datum, count: 0 }).count += 1;
    }
    
    const result = Object.values(counts);
    
    console.log(result);

    【讨论】:

    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2019-08-08
    • 2022-01-04
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    相关资源
    最近更新 更多