我正在努力了解.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
之前(这将是右下降)。但这不是结果中发生的事情。它仍然从低到高排列(或贝克到布莱克)。
答案 0 :(得分:4)
您对两个值使用lastOne
(而不是nextOne
)。所以
const [aFirst, aLast] = lastOne.split(', ');
const [bFirst, bLast] = lastOne.split(', ');
应该是
const [aFirst, aLast] = lastOne.split(', ');
const [bFirst, bLast] = nextOne.split(', ');