后台返回對象參數展開后如下
當通過 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