下班回家,有一盆友,问我一道面试题,要求获取一个随机数组的出现最多的元素,如果又好几个元素和最多的一样多,就最多的全部获取
下面是代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>输出arr数组中重复元素,重复数量</title>
</head>
<body>
<script>
var arr = new Array(20);
var obj = {};
for (var i = 0; i < arr.length; i++) {
arr[i] = Math.ceil(Math.random() * 10);
}
console.log(arr);
// 定义一个对象用于存放 拆分后的 字符串
var obj = {};
Array.prototype.getMost = function() {
var obj = this.reduce((p, n) => (p[n]++ || (p[n] = 1), (p.max = p.max >= p[n] ? p.max : p[n]), (p.key = p.max > p[n] ? p.key : n), p), {});
console.log(obj);
return obj
}
obj = arr.getMost()
console.log(obj, '次数最多: ' + obj.key + ' 次数: ' + obj.max);
var max = obj.max
var key = obj.key
obj.max = 0
obj.key = 0
console.log(obj);
// 此时obj 的属性就是 已经去重的 并且它对应的值就是 该字符串出现的次数
// 假设 最多的次数的是 max 出现最多的是name 如果有多个相同的数值将他们 推入数组
var arr2 = []
var name;
// 再次循环确定是否有 一样数量的字符
for (var max in obj) {
if (obj[max] == key) {
arr2.push(max);
}
}
console.log(max, "这是出现最多的次数");
console.log(key, "这是出现最多的其中一个");
console.log(arr2, "这数组内出现的 就是出现最多的数字");
</script>
</body>
</html>