1. 程式人生 > 其它 >for in 遍歷物件得到的資料順序不對(解決方法)

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