从排序函数返回值

时间:2018-09-13 20:43:42

标签: javascript

我正在对数组进行排序,以便将数组从最小到最大排序。

目前我知道。

let arr = arr2.sort((a, b) => {
    if (a < b) {
        return -1;
    }
    return 0;
});

但是我被告知要做

let arr = arr2.sort((a, b) => (
    a - b
));

这两种方法都可以正常工作,但是我试图弄清楚返回a - b等同于我的第一种方法。

1 个答案:

答案 0 :(得分:3)

您仍然需要比较相同的属性。当排序在同一个对象上进行时,您无需为新变量赋值。两者共享相同的对象引用。

arr2.sort((a, b) => a.timestamp - b.timestamp);

另外,如果仅返回-10,则由于忽略了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