如何在忽略项目(a、an、the)的情况下对javascript数组进行排序?
我使用以下排序功能对书籍列表进行排序:如何在忽略项目(a、an、the)的情况下对javascript数组进行排序?,javascript,sorting,Javascript,Sorting,我使用以下排序功能对书籍列表进行排序: var compare = function(a, b) { var aTitle = a.title.toLowerCase(), bTitle = b.title.toLowerCase(); if (aTitle > bTitle) return 1; if (aTitle < bTitle) return -1; return 0; }; var sortedBooks = books.sort(comp
var compare = function(a, b) {
var aTitle = a.title.toLowerCase(),
bTitle = b.title.toLowerCase();
if (aTitle > bTitle) return 1;
if (aTitle < bTitle) return -1;
return 0;
};
var sortedBooks = books.sort(compare);
var比较=函数(a,b){
var aTitle=a.title.toLowerCase(),
bTitle=b.title.toLowerCase();
如果(aTitle>bTitle)返回1;
if(aTitle
我如何调整它,使我忽略每个标题开头的文章?您可以简单地使用函数say
removeArticles()
,它检查句子中是否有多个单词,如果是,则返回第二个单词进行比较。对于特定的单词,您只需要为单词添加条件,例如(单词[0]='a'| | |单词[0]='a'| | |单词[0]='an')
将涵盖“a”
、“an”
和“the”
:
books=[“鲸鱼”、“Moive”、“美好时光”、“字母表2”、“字母表1”、“字母表汤”、“Foo”];
var比较=功能(a,b){
var aTitle=a.toLowerCase(),
bTitle=b.toLowerCase();
aTitle=移除物品(aTitle);
bTitle=移除物品(bTitle);
如果(aTitle>bTitle)返回1;
if(aTitle.sort
有副作用
function titleComparator(a, b) {
var articles = ['a', 'an', 'the'],
re = new RegExp('^(?:(' + articles.join('|') + ') )(.*)$'), // e.g. /^(?:(foo|bar) )(.*)$/
replacor = function ($0, $1, $2) {
return $2 + ', ' + $1;
};
a = a.toLowerCase().replace(re, replacor);
b = b.toLowerCase().replace(re, replacor);
return a === b ? 0 : a < b ? -1 : 1;
}
你说的“每个标题开头的文章”是什么意思?你是说每个标题都有不止一部作品,比如
“Moive”
,你想把它变成“Moive”
,以便进行比较吗?OP是指一个子字符串。“新希望”应该用字母N和“原力觉醒”应该按字母顺序排列“幽灵威胁”应该删除,但这与OP想要解决的问题不同。您的比较只需要测试字符串是否以文章开头,如果存在,则将其删除。要明确的是,您一次只对2个输入进行排序?我知道您的标题,但这不正确地按字母顺序排列了一本书名为“字母汤”的书@YPCrumble那么在这种情况下,您需要对每个可能的第一个单词进行分类。例如如果(单词[0]='a'| | |单词[0]='the'| | |…)
,我将在编辑中对其进行更改。更新。其余单词呢?现在您仅按第一个单词进行排序更改返回单词。拼接(1)。连接(“”);
到返回单词。拼接(1)。加入(“”;
以便“美好时光”正确地出现在“仁慈的上帝”之前,我认为这是正确的:)。谢谢!
var books = [
'A Wonderful Life', 'The Beginning', 'An Everlasting Tale', 'I go in the middle'
];
var sortedBooks = books.slice().sort(titleComparator); // note slice
// ["The Beginning", "An Everlasting Tale", "I go in the middle", "A Wonderful Life"]