我有一个函数,可以按艺术家的字母顺序完美地记录我的唱片,但是很多艺术家的名字开头都有“ The”一词,我希望该函数在出现时可以忽略“ The”并在其后的单词按字母顺序排列。这是我的数组和函数的片段:
var recordCollection = [{
"artist": "The Beatles",
"title": "The Beatles",
"year": "1968",
}, {
"artist": "Led Zepplin",
"title": "II",
"year": "1969",
}];
function alphabetize() {
recordCollection.sort(function(a, b) {
var nameA = a.artist.toLowerCase(),
nameB = b.artist.toLowerCase()
if (nameA < nameB)
return -1
if (nameA > nameB)
return 1
return 0
})
};
答案 0 :(得分:3)
可以使用一个简单的正则表达式:
recordCollection.sort((a, b) => {
const nameA = a.artist.toLowerCase().replace(/^the\s+/, '');
const nameB = b.artist.toLowerCase().replace(/^the\s+/, '');
return nameA.localeCompare(nameB);
});
如果您完全想要DRY,甚至可以:
recordCollection.sort((a, b) => {
const [nameA, nameB] = [a, b].map(_ => _.artist.toLowerCase().replace(/^the\s+/, ''));
return nameA.localeCompare(nameB);
});
const recordCollection = [{
"artist": "The Beatles",
"title": "The Beatles",
"year": "1968",
}, {
"artist": "Led Zepplin",
"title": "II",
"year": "1969",
}];
recordCollection.sort((a, b) => {
const [nameA, nameB] = [a, b].map(_ => _.artist.toLowerCase().replace(/^the\s+/, ''));
return nameA.localeCompare(nameB);
});
console.log(recordCollection);
/^the\s+/
将在字符串的开头捕获“ the”,后跟任意数量的空格,0
。注意:使用箭头语法和const
时,如果您需要支持较旧的客户端/未使用Babel这样的工具,则可以轻松地切换回function() { ... }
和var
。