我试图了解.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之前(该字母将右移)。但这不是结果。它仍然从低到高排列(或者从贝克到布雷克)。

最佳答案

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

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


应该是

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

10-06 15:22