js對象遍歷輸出順序錯亂的問題


、js對象遍歷順序錯亂的原因

下邊就來實踐一下:

var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',hobby:'dsfd'};
Object.keys(obj)

輸出:["3", "name", "age", "school", "class", "hobby"];

換一下對象順序,

var obj={name:'abc','3':'ccc',age:23,school:'sdfds',class:'dfd',hobby:'dsfd'};
Object.keys(obj)

輸出:["3", "name", "age", "school", "class", "hobby"]

所以,對象的遍歷輸出並不是按照順序來的,那么是按照什么規則來的呢,仔細深入研究你會發現,這還跟瀏覽器有關系,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去取對象的屬性值。

二、js數組遍歷排序方法

  大家都知道數組的遍歷是按照順序的,那么當一個數組中放了很多對象,想要按照對象的某個屬性去排序數組需要怎么處理呢?

  1.定義一個方法:

var compare = function (prop) {
    return function (obj1, obj2) {
        var val1 = obj1[prop];
        var val2 = obj2[prop];if (val1 < val2) {
            return -1;
        } else if (val1 >www.wmyl11.com  val2) {
            return 1;
        } else www.thd178.com {
            return 0;
        }            
    } 
}
var arr=[{ name:"wlz", age:25},www.hjd1956.com{ name:"wlz",www.120xh.cn  age:5},{ name:"wlz", age:15},{ name:"wlz", age:3},{ name:"zlw", age:24}];
console.log(arr.sort(compare('age')))

最后這個數組就根據屬性來做排序了。


免責聲明!

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



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