对对象数组进行排序

时间:2016-11-02 09:00:57

标签: javascript sorting ecmascript-6

这是对对象数组进行排序的正确方法吗?:

class Alarm{
    constructor(data){
        this.a = data.a;
        this.b = data.b;
    }
}

const a1 = new Alarm({a:4,b:1});
const a2 = new Alarm({a:1,b:4});
const a3 = new Alarm({a:2,b:3});
const a4 = new Alarm({a:3,b:2});

let a = [a1,a2,a3,a4];

a.sort((x,y)=>x.a>y.a);

for(const i of a){
    console.log(i)
}

a.sort((x,y)=>x.b>y.b);

for(const i of a){
    console.log(i)
}

当我查看文档时:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

他们正在这样做,这看起来非常尴尬:

a.sort((x,y)=>
    {
        if(x.a>y.a) return 1;
        if(x.a<y.a) return -1;
        return 0;
    });

1 个答案:

答案 0 :(得分:5)

您可以使用差异进行排序

a.sort((x, y) => x.a - y.a);

取自Array#sort

  

如果提供compareFunction,则根据比较函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,那么:

     
      
  • 如果compareFunction(a, b)小于0,则将a排序为低于b的索引,即a先出现。
  •   
  • 如果compareFunction(a, b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
  •   
  • 如果compareFunction(a, b)大于0,则将b排序为低于。
  • 的索引   当给定一对特定元素a和b作为其两个参数时,
  • compareFunction(a, b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。
  •   

&#13;
&#13;
class Alarm{
    constructor(data){
        this.a = data.a;
        this.b = data.b;
    }
}

const a1 = new Alarm({a:4,b:1});
const a2 = new Alarm({a:1,b:4});
const a3 = new Alarm({a:2,b:3});
const a4 = new Alarm({a:3,b:2});

let a = [a1, a2, a3, a4];

a.sort((x,y) => x.a - y.a);

console.log(JSON.stringify(a, 0, 4));
&#13;
&#13;
&#13;