一、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數組遍歷排序方法
大家都知道數組的遍歷是按照順序的,那么當一個數組中放了很多對象,想要按照對象的某個屬性去排序數組需要怎么處理呢?
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')))

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