计算数组元素的出现次数/频率

2022-08-29 23:53:58

在Javascript中,我试图获取一个初始的数字值数组并计算其中的元素。理想情况下,结果将是两个新数组,第一个数组指定每个唯一元素,第二个数组包含每个元素出现的次数。但是,我对有关输出格式的建议持开放态度。

例如,如果初始数组为:

5, 5, 5, 2, 2, 2, 2, 2, 9, 4

然后创建两个新数组。第一个将包含每个唯一元素的名称:

5, 2, 9, 4

第二个将包含该元素在初始数组中出现的次数:

3, 5, 1, 1

由于数字 5 在初始数组中出现三次,因此数字 2 出现五次,9 和 4 都出现一次。

我寻找了很多解决方案,但似乎没有任何效果,我自己尝试过的所有事情最终都变得非常复杂。任何帮助将不胜感激!

谢谢:)


答案 1

您可以使用对象来保存结果:

const arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];
const counts = {};

for (const num of arr) {
  counts[num] = counts[num] ? counts[num] + 1 : 1;
}

console.log(counts[5], counts[2], counts[9], counts[4]);

所以,现在你的对象可以告诉你一个特定数字的计数是多少:counts

console.log(counts[5]); // logs '3'

如果要获取成员数组,只需使用函数keys()

keys(counts); // returns ["5", "2", "9", "4"]

答案 2

const occurrences = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4].reduce(function (acc, curr) {
  return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
}, {});

console.log(occurrences) // => {2: 5, 4: 1, 5: 3, 9: 1}