我正在对数组进行排序,以便将数组从最小到最大排序。
目前我知道。
let arr = arr2.sort((a, b) => {
if (a < b) {
return -1;
}
return 0;
});
但是我被告知要做
let arr = arr2.sort((a, b) => (
a - b
));
这两种方法都可以正常工作,但是我试图弄清楚返回a - b
等同于我的第一种方法。
答案 0 :(得分:3)
您仍然需要比较相同的属性。当排序在同一个对象上进行时,您无需为新变量赋值。两者共享相同的对象引用。
arr2.sort((a, b) => a.timestamp - b.timestamp);
另外,如果仅返回-1
或0
,则由于忽略了1
而使排序算法变得愚蠢。这样会导致不必要的排序周期,或者完全是错误的!
// unpredictable EDGE CHROME/FF
console.log([4, 3, 2, 1].sort((a, b) => +(a > b)).join(' ')); // desc asc
console.log([4, 3, 2, 1].sort((a, b) => +(a < b)).join(' ')); // desc desc
console.log([4, 3, 2, 1].sort((a, b) => -(a > b)).join(' ')); // desc desc
console.log([4, 3, 2, 1].sort((a, b) => -(a < b)).join(' ')); // asc desc
// predictable right!
console.log([4, 3, 2, 1].sort((a, b) => a - b).join(' ')); // asc asc
console.log([4, 3, 2, 1].sort((a, b) => b - a).join(' ')); // desc desc