这是对对象数组进行排序的正确方法吗?:
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;
});
答案 0 :(得分:5)
您可以使用差异进行排序
a.sort((x, y) => x.a - y.a);
如果提供
compareFunction
,则根据比较函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,那么:
- 如果
compareFunction(a, b)
小于0,则将a排序为低于b的索引,即a先出现。- 如果
compareFunction(a, b)
返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。- 如果
的索引 当给定一对特定元素a和b作为其两个参数时,compareFunction(a, b)
大于0,则将b排序为低于。compareFunction(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));
&#13;