gpt4 book ai didi

javascript - 如何在 JavaScript 中按字母顺序对数组中的姓氏进行排序和格式化

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:27:49 26 4
gpt4 key购买 nike

我有一个数组 moonwalkers 并编写了一个函数 alphabetizer 来按字母顺序对名称进行排序,并将它们的格式设为姓氏在前。

它工作正常,但我如何编写更好的代码?

我用了这个article by Hubrik并引用Stack Overflow了解排序在 JS 中的工作原理。

我试图将 compare 函数重写到 last name 变量中,结果弄得一团糟。我怀疑这是因为我仍在努力了解范围和提升。

var moonWalkers = [
"Neil Armstrong",
"Buzz Aldrin",
"Pete Conrad",
"Alan Bean",
"Alan Shepard",
"Edgar Mitchell",
"David Scott",
"James Irwin",
"John Young",
"Charles Duke",
"Eugene Cernan",
"Harrison Schmitt"
];


var finalNameList = [];

function alphabetizer(names) {

// compare last names
function compare (a, b) {
var aName = a.split(" ");
var bName = b.split(" ");
var aLastName = aName[aName.length - 1];
var bLastName = bName[bName.length - 1];

if (aLastName < bLastName) return -1;
if (aLastName > bLastName) return 1;
return 0;
}

names.sort(compare);

// to format names
for (i = 0; i < names.length; i++) {
var lastName = names[i].split(" ")[1];
var firstName = names[i].split(" ")[0];
var newName = lastName + ", " + firstName;

// push newName to global var finalNameList
finalNameList.push(newName);
}

return finalNameList;
}

console.log(alphabetizer(moonWalkers));

最佳答案

该方法并不理想,因为它仅比较姓氏。姓氏相同的人不会按名字排序。

试试这个:

var moonWalkers = [
"Neil Armstrong",
"Buzz Aldrin",
"Pete Conrad",
"Alan Bean",
"Alan Shepard",
"Edgar Mitchell",
"David Scott",
"James Irwin",
"John Young",
"Charles Duke",
"Eugene Cernan",
"Harrison Schmitt"
];

function alphabetizer(names) {
var list = [];

// format names first
for (i = 0; i < names.length; i++) {
var lastName = names[i].split(" ")[1];
var firstName = names[i].split(" ")[0];
var newName = lastName + ", " + firstName;

// push newName to global var finalNameList
list.push(newName);
}

// compare entire name
return list.sort();
}

console.log(alphabetizer(moonWalkers));


更新:此版本将在结果中包含中间名或昵称。如果名称包含“Jr”或“Esq”等后缀,它将无法按预期工作。

var moonWalkers = [
"Neil Armstrong",
"Edwin \"Buzz\" Aldrin",
"Charles \"Pete\" Conrad",
"Alan Bean",
"Alan Shepard",
"Edgar Mitchell",
"David Scott",
"James Irwin",
"John Young",
"Charles Duke",
"Eugene Cernan",
"Harrison \"Jack\" Schmitt"
];

function alphabetizer(names) {
return names.map(function(name) {
var full = name.split(" "),
last = full.pop();
return last + ", " + full.join(" ");
}).sort();
}

console.log(alphabetizer(moonWalkers));

关于javascript - 如何在 JavaScript 中按字母顺序对数组中的姓氏进行排序和格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39050438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com