0

我有 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 进行排序,而无需更改结构且不会丢失数据。

4

1 回答 1

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

希望这可以帮助。

于 2013-10-24T07:59:03.770 回答