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)
您可以使用差异进行排序
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)