如何在一个对象里找到出现频率最高的字段,并排序,类似于{[a:4],[b:3],[c:2]};这种形式,表示a出现频率最高且为4次,b出现频率为3次,排名第二,以此类推
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>找出对象里字段出现频率,并排序</title>
</head>
<body>
</body>
<script type="text/javascript">
//任意数据,不限制各种情况
var objData={
"name":"li",
"age":18,
"sex":"girl",
"students":{
"name":"liu",
"age":24,
"sex":"boy",
"family":[
{
"name":"sha",
"daughter":"ll",
"son":[{
"son1":"hh",
"son2":[{
"name":"gg"
},{
"age":0
}]
},{
"ll":28
}]
},{
"mmm":"llll"
},{
"hh":null
}]
}
}
// 第一步;
// 统计所有元素的数组,包裹所有key 和 所有value,子集数组中的所有元素;
var arr = [];
var eachData = {
forData : function(_arr){
for(var i=0;i<_arr.length;i++){
if(_arr[i] instanceof Array){
eachData.forData(_arr[i]);
}else if(_arr[i] instanceof Object){
eachData.forInData(_arr[i]);
}else{
arr.push(_arr[i]);
}
}
},
forInData : function(_obj){
for(var key in _obj){
arr.push(key);
if(_obj[key] instanceof Array){
eachData.forData(_obj[key]);
}else if(_obj[key] instanceof Object){
eachData.forInData(_obj[key]);
}else{
arr.push(_obj[key]);
}
}
}
}
eachData.forInData(objData);
console.log(arr);
// 第二步 创建数组twoObj
var twoObj = new Object();
for (var i = 0; i < arr.length; i++) {
if(twoObj.hasOwnProperty(arr[i])){
twoObj[arr[i]] = twoObj[arr[i]] + 1;
}else{
twoObj[arr[i]] = 1;
}
}
console.log(twoObj);
// 第三步;
var result = [];
for(var key in twoObj){
var _arr = [];
_arr[0] = key;
_arr[1] = twoObj[key];
result.push(_arr);
}
console.log(result);
var compare = function (str) {
return function (_arr1, _arr2) {
var val1 = _arr1[str];
var val2 = _arr2[str];
if (val1 < val2) {
return 1;
} else if (val1 > val2) {
return -1;
} else {
return 0;
}
}
}
//按照每个子数组的value字段值的下标来排序
var resultArr = result.sort(compare("1"));
//得到每个数据的出现频率并排序
console.log(resultArr);
</script>
</html>