对对象数组进行排序

Baz*_*Baz 2 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)
}
Run Code Online (Sandbox Code Playgroud)

当我查看文档时:

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;
    });
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

您可以使用差异进行排序

a.sort((x, y) => x.a - y.a);
Run Code Online (Sandbox Code Playgroud)

取自 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的索引.
  • compareFunction(a, b)当给定一对特定元素a和b作为其两个参数时,必须始终返回相同的值.如果返回不一致的结果,则排序顺序未定义.

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));
Run Code Online (Sandbox Code Playgroud)

  • @Baz因为它是如何工作的.布尔意味着什么?返回值需要指示第一个参数是在第二个参数之前还是之后,或者在同一个位置. (3认同)