我正在像这样使用 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获取 name
和 count
其 count
大于 3.0
因为 7
元素上有错字,即 "Brian,"
。这就是为什么它将 Brian
的 count
作为 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/