需要先利用对象来存储数字以及其出现的次数,之后可以用对象或者两个变量来存储出现频次最高的数字及其对应的频次。
先定义一个数组,遍历这个数组然后将其数据存储在一个新的对象中。
// 先定义一个数组
var arr = [1,1,2,3,1,2,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,3,4,2,5,1,2,2,1,3,5,6,6,1,2,1,2,2,2,2,2,2,2,2]
// 定义一个对象用来记录数据
var obj = {}
for(var i = 0;i < arr.length; i++){
// 判断此数据是否存在,存在+1,不存在则重新添加进对象
// obj[arr[i]]为空时,false,不为空时true,此时表明对象中已存在该数据
if(obj[arr[i]]){
obj[arr[i]] ++;
}else{
obj[arr[i]] = 1;
}
}
此时数字及其对应的频次被存储在obj这个对象中。
1、利用对象存储并输出
var result;
for(var prop in obj){
// 初始化对象中的值,刚开始对象为空时把obj的第一个属性值赋给它
if(!result){
result = {};
result[prop] = obj[prop];
// 定义一个新的变量存储初始化时对象中的值,避免下面的代码每次都更新result中的值
var z = result[prop];
}
if(obj[prop] > z){
z = obj[prop];
// 让每一次循环进来result中的值清空,避免一直往result中添加数据
result = {};
result[prop] = obj[prop]
}
}
console.log(result);
在这个方法中值得记录关注的是如何把对象中的第一个值取出来。
2、利用两个变量分别存储数字和频次
var count = 0;
var string;
for(var prop in arr){
if(obj[prop] > count){
// 用两个变量存储数值和频次,当频次更大时,分别把频次和数值赋给count和string
count = obj[prop];
string = prop;
}
}
console.log(`数组中出现次数最多的数字和次数为:${string} : ${count}`);
这个方法理解起来比较简单。