对复杂的json对象进行排序而不会丢失数据并具有相同的结构

时间:2013-10-24 06:02:11

标签: json sorting

我有像JSON一样的

var MyJSON = {
  "item1" : "value1",
  "item2" : {
     "somedata": "somevalue",
      "entries":[ 
        {   
         "sortitem":"ABC",
        },
        {
         "sortitem":"PQR",    
       },
       {
        "sortitem":"XYZ",    
       }
      ]  
  }
  "item3" : {
     "somedata": "somevalue",
      "entries":[ 
        {   
         "sortitem":"abc",
        },
        {
         "sortitem":"pqr",    
       },
       {
        "sortitem":"xyz",    
       }
      ]  
  }

};

我必须在“sortitem”上对MyJSON进行排序,而不会改变结构并且不会丢失数据。

1 个答案:

答案 0 :(得分:0)

也许这会有所帮助,

(function (data, sField){
    function recurse (dt){
        for(prop in dt){
            if(Object.hasOwnProperty.call(dt, prop)){
                if(Object.prototype.toString.call(dt[prop]) === '[object Array]'){
                    dt[prop].sort(function(a, b){
                        if(!a[sField] || !b[sField]) return 0; 
                        return a[sField].localeCompare(b[sField]); 
                    });
                }
                else if(Object.prototype.toString.call(dt[prop]) === '[object Object]'){
                    recurse(dt[prop]);
                }
            }
        }
    }
    recurse(data);
})(MyJSON, 'sortitem'); //data and sortfield

希望这会有所帮助。