如何在忽略项目(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"]