for in 遍歷對象得到的數據順序不對(解決方法)


后台返回對象參數展開后如下

當通過 for in 循環存放到數組的時候得到了

很顯然順序跟想象的不一樣,因為對象中沒有順序,他不是數組,所以想要得到一個順序就首先要只給對象指定規則,這里是通過對象的value的字母來指定的規則

 

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

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

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

那么,解決辦法呢?

 

 1 //循環中使用
 2 for(let item in this.objectOrder(data[0])){
 3   this.ChartsTabData.push(item)
 4 }
 5 
 6 //方法
 7 
 8 objectOrder(obj) {//排序的函數
 9 
10 var newkey = Object.keys(obj).sort(); //先用Object內置類的keys方法獲取要排序對象的屬性名,再利用Array原型上的sort方法對獲取的屬性名進行排序,newkey是一個數組,這行是最重要的代碼!
11 
12 var newObj = {};//創建一個新的對象,用於存放排好序的鍵值對
13 
14 for (var i = 0; i < newkey.length; i++) {//遍歷newkey數組
15 
16   newObj[newkey[i]] = obj[newkey[i]];//向新創建的對象中按照排好的順序依次增加鍵值對
17 
18 }
19 
20 return newObj;//返回排好序的新對象
21 
22 }

 

 

結果如下

這樣就能解決循環對象得到順序亂的方法了
 
參考大佬的地址:https://blog.csdn.net/wk15038187622/article/details/104062244


免責聲明!

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



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