为什么使用<和>对排序函数没有影响吗?

时间:2018-03-12 10:21:20

标签: javascript sorting

我正在努力了解.sort的工作原理。到目前为止,比较函数和返回都没有意义。

以下是Last Name, First Name形式的一系列名称。

const people = ['Beck, Glenn', 'Becker, Carl', 'Beckett, Samuel', 'Beddoes, Mick', 'Beecher, Henry', 'Beethoven, Ludwig', 'Begin, Menachem', 'Belloc, Hilaire', 'Bellow, Saul', 'Benchley, Robert', 'Benenson, Peter', 'Ben-Gurion, David', 'Benjamin, Walter', 'Benn, Tony', 'Bennington, Chester', 'Benson, Leana', 'Bent, Silas', 'Bentsen, Lloyd', 'Berger, Ric', 'Bergman, Ingmar', 'Berio, Luciano', 'Berle, Milton', 'Berlin, Irving', 'Berne, Eric', 'Bernhard, Sandra', 'Berra, Yogi', 'Berry, Halle', 'Berry, Wendell', 'Bethea, Erin', 'Bevan, Aneurin', 'Bevel, Ken', 'Biden, Joseph', 'Bierce, Ambrose', 'Biko, Steve', 'Billings, Josh', 'Biondo, Frank', 'Birrell, Augustine', 'Black, Elk', 'Blair, Robert', 'Blair, Tony', 'Blake, William'];

我想按姓氏排列,从低到高。

这是我的代码(我正在关注this教程):

  const alpha = people.sort((lastOne, nextOne) => {
    const [aFirst, aLast] = lastOne.split(', ');
    const [bFirst, bLast] = lastOne.split(', ');
    return aLast < bLast ?  1 : -1;
});

这显然有效,因为它来自教程。但我不明白为什么它有效。

  • 首先,这两行在输出上没有区别 - 为什么会这样:

    return aLast < bLast ? 1 : -1;
    return aLast > bLast ? 1 : -1;

  • 其次,来自MDN pages,它表示返回小于零的值会将第一个值放在第二个值之前。返回大于零的值将把第二个值放在第一个值之前。

有了这两件事,我就这样写了:

return aLast < bLast ? -1 : 1:如果a小于b,请将a放在第一位,b秒(这将是向上升?)。这不正确吗?

但是在教程中,它是用这种方式编写的:

return aLast < bLast ? 1 : -1;:我读到的内容 - 如果a小于b,则返回1,这会b放在a之前(这将是右下降)。但这不是结果中发生的事情。它仍然从低到高排列(或贝克到布莱克)。

1 个答案:

答案 0 :(得分:4)

您对两个值使用lastOne(而不是nextOne)。所以

const [aFirst, aLast] = lastOne.split(', ');
const [bFirst, bLast] = lastOne.split(', ');

应该是

const [aFirst, aLast] = lastOne.split(', ');
const [bFirst, bLast] = nextOne.split(', ');