首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >统计数组元素的出现次数/频率

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

Stack Overflow用户
提问于 2011-04-15 02:32:27
回答 28查看 558.4K关注 0票数 280

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

例如,如果初始数组为:

代码语言:javascript
复制
5, 5, 5, 2, 2, 2, 2, 2, 9, 4

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

代码语言:javascript
复制
5, 2, 9, 4

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

代码语言:javascript
复制
3, 5, 1, 1

因为数字5在初始数组中出现了三次,所以数字2出现了五次,9和4都出现了一次。

我已经寻找了很多解决方案,但似乎都不起作用,而且我自己尝试的一切都变得非常复杂。任何帮助都将不胜感激!

谢谢:)

EN

回答 28

Stack Overflow用户

回答已采纳

发布于 2011-04-15 02:58:56

代码语言:javascript
复制
const arr = [2, 2, 5, 2, 2, 2, 4, 5, 5, 9];

function foo (array) {
  let a = [],
    b = [],
    arr = [...array], // clone array so we don't change the original when using .sort()
    prev;

  arr.sort();
  for (let element of arr) {
    if (element !== prev) {
      a.push(element);
      b.push(1);
    }
    else ++b[b.length - 1];
    prev = element;
  }

  return [a, b];
}

const result = foo(arr);
console.log('[' + result[0] + ']','[' + result[1] + ']')
console.log(arr)

票数 109
EN

Stack Overflow用户

发布于 2011-04-15 02:42:13

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

代码语言:javascript
复制
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对象可以告诉您某个特定数字的计数:

代码语言:javascript
复制
console.log(counts[5]); // logs '3'

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

代码语言:javascript
复制
keys(counts); // returns ["5", "2", "9", "4"]
票数 286
EN

Stack Overflow用户

发布于 2011-04-15 05:09:25

代码语言:javascript
复制
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}

票数 139
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5667888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档