我试图了解.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(', ');