JS對JSON對象遍歷輸出的時候真的是按照順序輸出嗎?


  對象的遍歷輸出並不是按照對象屬性定義順序來的,那么是按照什么規則來的呢,仔細深入研究你會發現,這還跟瀏覽器有關系,Chrome跟IE是不一樣的,所以給出以下結論:

  Chrome Opera 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版規范。因此,使用 for-in 語句遍歷對象屬性時遍歷書序並非屬性構建順序。而 IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是較老的 ECMA-262 第三版規范,屬性遍歷順序由屬性構建的順序決定。

  Chrome Opera 中使用 for-in 語句遍歷對象屬性時會遵循一個規律:
它們會先提取所有 key 的 parseFloat 值為非負整數的屬性,然后根據數字順序對屬性排序首先遍歷出來,然后按照對象定義的順序遍歷余下的所有屬性。

那么,解決辦法呢?

可以把對象通過Object.keys提取對象的key出來變成數組,然后通過數組的排序,然后遍歷數組,通過key去取對象的屬性值。

  有一些業務要求對對象的各屬性值按照一定順序排列,而給定的對象屬性又不確定能按順序排列(如,數字大小順序)

 

//************************* JSON對象屬性排序*********************************//
//要求傳入參數 JsonData 為JSON對象
//輸出結果為JSON對象
//輸出的對象為按key值升序排列的
function JsonObjSort(JsonData) { if(JsonData) { var JsonKeyArray=new Array(); for(x in JsonData) { var xToInt=parseInt(x); JsonKeyArray.push(xToInt); } JsonKeyArray=JsonKeyArray.sort();//對數組升序排列 var NewJsonStr="" ; for(var i=0;i<JsonKeyArray.length;i++) { if(i>0) { NewJsonStr += ','; } var value = JsonData[JsonKeyArray[i]]; NewJsonStr += '"'+JsonKeyArray[i]+ '"' +':'+value; } var NewJsonStrObj=eval('('+'{'+NewJsonStr+'}'+')'); //console.log(NewJsonStrObj); return NewJsonStrObj ; } else return ""; }

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM