javascript - 计算数组中每个元素的频率 - javascript

我正在像这样使用 reduce 来计算客户出现次数。然后,我需要显示出现超过 3 次的客户。它确实有效,但只显示计数,因为我使用的是 map.values()。我也希望它显示客户名称。有人知道怎么做吗?谢谢!

const customer = ["Andy", "Drew", "Andy", "Brian", "Andy", "Brian", "Andy", "Brian", "Brian", "Drew", "Brian"];
const custFreq = customer.reduce((acc, curr) => acc.set(curr, (acc.get(curr) || 0) + 1), new Map());
const result = [...custFreq.values()].filter((curr) => curr >= 3.0);
console.log(result); 

result => { 4, 5 }
expected result => { Andy: 4, Brian: 5 }

最佳答案

您可以使用 Object.entries和 reduce获取 namecountcount 大于 3.0

因为 7 元素上有错字,即 "Brian,"。这就是为什么它将 Briancount 作为 4 而不是 5

const customer = [
  "Andy",
  "Drew",
  "Andy",
  "Brian",
  "Andy",
  "Brian",
  "Andy",
  "Brian,",
  "Brian",
  "Drew",
  "Brian",
];
const custFreq = customer.reduce(
  (acc, curr) => acc.set(curr, (acc.get(curr) || 0) + 1),
  new Map()
);
const result = [...custFreq.entries()].reduce((acc, [key, value]) => {
  if (value >= 3.0) acc[key] = value;
  return acc;
}, {});
console.log(result);

有效的解决方案:只需要迭代一次customer数组

const customer = [
  "Andy",
  "Drew",
  "Andy",
  "Brian",
  "Andy",
  "Brian",
  "Andy",
  "Brian,",
  "Brian",
  "Drew",
  "Brian",
];

const result = {};

const custFreq = customer.reduce((acc, curr) => {
  acc[curr] = (acc[curr] ?? 0) + 1;
  if (acc[curr] >= 3) {
    result[curr] = acc[curr];
  }
  return acc;
}, {});

console.log(custFreq);
console.log(result);

https://stackoverflow.com/questions/67968681/

相关文章:

next.js - NextJS 将类从页面传递到布局组件

numpy - XGBoost:检查失败:有效:输入数据包含 `inf` 或 `nan`

vuejs3 - react 对象未在模板 Vue3 Composition API 上更新

scala - 推特 future 封锁

xml - 同时迭代两个 for-each 循环

c - 分拣技术 C

c++ - std::sort 中用 lambda 函数指定的比较函数是否返回 bool 类型?

Flutter - 墨水池 : Why does onHover() require onTap()

sql - 有没有一种方法可以不使用 FOR 循环来创建虚拟记录?

javascript - Target 的 Toggled ClassList 上的 CSS Tra