js數組對象排序詳解

1、js對象遍歷輸出的時候真的是按照順序輸出嗎?

  下邊就來實踐一下:數組

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

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

換一下對象順序,spa

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

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

因此,對象的遍歷輸出並非按照順序來的,那麼是按照什麼規則來的呢,仔細深刻研究你會發現,這還跟瀏覽器有關係,Chrome跟IE是不同的,因此給出如下結論:對象

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

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

那麼,解決辦法呢?ip

能夠把對象經過Object.keys提取對象的key出來變成數組,而後經過數組的排序,而後遍歷數組,經過key去取對象的屬性值。io

2、js數組遍歷排序方法

  你們都知道數組的遍歷是按照順序的,那麼當一個數組中放了不少對象,想要按照對象的某個屬性去排序數組須要怎麼處理呢?console

  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 > val2) {
            return 1;
        } else {
            return 0;
        }            
    } 
}
var arr=[{ name:"wlz", age:25},{ name:"wlz", age:5},{ name:"wlz", age:15},{ name:"wlz", age:3},{ name:"zlw", age:24}];
console.log(arr.sort(compare('age')))

最後這個數組就根據屬性來作排序了。

相關文章
相關標籤/搜索