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')))

最后这个数组就根据属性来作排序了。

相关文章
相关标签/搜索