首页 > 解决方案 > 如何通过数组中的键计算相同对象的数量?

问题描述

我有一个对象数组:

[
  { appleID: 13, bananaID: 55 },
  { appleID: 24, bananaID: 13}, 
  { appleID: 97, bananaID: 13},
  { appleID: 13, bananaID: 55 }
]

结果应如下所示:

[
  { appleID: 13, bananaID: 55, count: 2 },
  { appleID: 24, bananaID: 13, count: 1}, 
  { appleID: 97, bananaID: 13, count: 1}
]

计算相同元素的数量element === appleID && element === bananaID

标签: javascriptarrayssortingobjectjavascript-objects

解决方案


您可以.reduce通过以下两件事来汇总您的数据:

  1. 关键思想是key使用类似的格式构建const key = ${appleID}-${bananaID}
  2. 使用 在性能方面,您可以使用object以获得最高的性能(Find just takes O(1)
    const data = [
      { appleID: 13, bananaID: 55 },
      { appleID: 24, bananaID: 13}, 
      { appleID: 97, bananaID: 13},
      { appleID: 13, bananaID: 55 }
    ];
    
    const result = data.reduce((acc, {appleID, bananaID}) => {
      const key = `${appleID}-${bananaID}`
      acc[key] ??= {appleID, bananaID, count: 0};
      acc[key]["count"] += 1;
      
      return acc;
    }, {});
    
    console.log(Object.values(result));

推荐阅读