如何在javascript中查找数组中的顶级循环项



假设我有一个国家名称字符串数组,即

const array = ["usa", "spain", "canada", "usa", "usa", "spain"]

如何循环遍历该数组并生成一个列表,该列表增加该数组中最受欢迎的项,并且仅列出前3个项目?

对于更多的上下文,实际用例是数百个数组项,其中包含数十个甚至数百个不同的国家。

我知道我可以循环遍历数组并创建一个新数组,并在每次特定字符串再次出现时进行递增,但我只是好奇是否有人有更清晰,更通用的方法。

所需输出:

usa: 3
spain: 2
canada: 1

感谢您的宝贵时间。

您可以使用Array.reduce:

const array = ["usa", "spain", "canada", "usa", "usa", "spain"]
const obj = array.reduce((a, b) => { return a[b] = array.filter(e => e == b).length, a }, {})
console.log(obj);

这不是很漂亮,但我认为这是我能提供的最像js的代码片段

const array = ["usa", "spain", "canada", "usa", "usa", "spain"]
const result = array.reduce((acc, cur) => {acc[cur] = (acc[cur] ?? 0) + 1; return acc}, {})
console.log(result)

当然,这可以用更好的方式来完成!

简单但最直观的解决方案。

const arr = ["usa", "spain", "canada", "usa", "usa", "spain"];
let results = {};
for (let country of arr) {
results[country] = (results[country] || 0) + 1;
}
console.log(results);

使用reduce获得每个项目的出现次数,然后通过排序其值获得前3个对象,然后使用reduce获得前3个key-value对。

const data = ["usa", "spain", "canada", "usa", "usa", "spain"];
// Find the occurrences of each item
const countMap = data.reduce((acc, curr) => {
acc[curr] = (acc[curr] || 0) + 1;
return acc;
}, {});
// Sort the object by values and get the top 3
const sorted = Object.keys(countMap)
.sort((a, b) => countMap[b] - countMap[a])
.slice(0, 3);
// Get the desired key-count pair
const result = sorted.reduce(
(acc, item) => ({
...acc,
[item]: countMap[item]
})
,{});
console.log(result);

最新更新