# 找出数组中重复次数最多的元素

# 快速导航

# 应用场景

对于常规性的热词分析,在一字符串数组中,找出数组项中出现次数最多的那一个元素

或者记录每日网站/app 访问的 ip 数,访问次数最多的用户,找出频率最高的那个 ip,进而进行精准的个性化推送

在前端需要做一些处理:例如出现最多的词高亮显示,根据热词,舆论言情,判断趋势的走向.进而提供商业性的解决方案,措施等

那些热点,八卦,股市,购物 app 内搜索热词,推荐等,或多或少背后都是应用

当然海量的数据,例如:100 百万条数据,全部放到一个数组当中去?这显然是不合适的

数据太大,内存受限,但可以把大文件化成小文件,可以采用hash_map方式统计,在采用堆/快速排序

总得来说,处理海量的数据中找出重复次数最多的一个,先做hash,然后映射为小文件,然后读取文件中重复次数最多的一个,并记录重复次数

本示例并不考虑海量数据

# 示例

let hotWords = [
  'JavaScript',
  'html',
  'css',
  'Java',
  'Js',
  'JS',
  'JS',
  'react',
  'vue',
];

// 出现次数最多的JS
1
2
3
4
5
6
7
8
9
10
11
12
13

# 方法 1-常规方法-循环遍历比较

点击即可查看数组中重复最多的那个数
function hightFrequency(arr) {
  var result = [0, 0];
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0, count = 0; j < arr.length; j++) {
      if (arr[i] == arr[j]) {
        ++count;
      }
    }
    if (count > result[0]) {
      result[0] = count;
      result[1] = arr[i];
    } else if (count == result[0] && result[1] < arr[i]) {
      result[1] = arr[i];
    }
  }
  return `热词${result[1]},出现了${result[0]}`;
}

let hotWords = [
  'JavaScript',
  'html',
  'css',
  'Java',
  'Js',
  'Js',
  'Js',
  'react',
  'vue',
];
console.log(hightFrequency(hotWords)); //热词Js,出现了3次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 方法 2-用对象来处理-将元素赋值到属性上-判断之前有没有这个属性

对象属性同样可以用来做数组去重,但是会将 number,NaN,undefined,null,变为字符串形式,因为对象的属性名就是一个字符串

点击即可查看代码
const hightFrequency = function(arrs) {
  var [obj, max, elm] = [{}, 1, '']; // 数组解构
  arrs.forEach((value) => {
    // 对传入的数组值进行遍历
    if (obj[value]) {
      // 已经有值了 就把值+1
      obj[value]++;
      if (obj[value] > max) {
        // 判断重复次数有没有超过当前最高的
        max = obj[value]; // 重复多少次
        elm = value; // el为当前元素
      }
    } else {
      // 没有值 就初始化一个值
      obj[value] = 1;
    }
  });
  return `关键词${elm},出现了${max}`;
};

let hotWords = [
  'JavaScript',
  'html',
  'css',
  'Java',
  'Js',
  'Js',
  'Js',
  'react',
  'vue',
];
console.log(hightFrequency(hotWords)); // 关键词Js,出现了3次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 方法 3-

点击即可查看代码
function countOccurrences(arr, value) {
  let result = arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0);
  return result;
}

var arrs = [1, 2, 3, 1, 2, 1, 4, 5, 1, 2, 4, 5];
countOccurrences(arrs, 1); // 4
1
2
3
4
5
6
7

# 检查数组中某元素出现的次数

function countOccurrences(arr, value) {
  return arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
}
1
2
3
白色

关注公众号

一个走心,有温度的号,同千万同行一起交流学习

加作者微信

扫二维码 备注 【加群】

扫码易购

福利推荐