オブジェクト内の数値周波数を取得し、ソートする方法

2603 ワード

オブジェクト内で最も頻度の高いフィールドを見つけ、{[a:4],[b:3],[c:2]}のようにソートする方法.この形式は,a出現頻度が最も高く4回,b出現頻度が3回で2位であることを示す.



    
    


    


//    ,       
    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);