如何在忽略文章(a,an,the)的情况下对javascript数组进行排序
How can I sort a javascript array while ignoring articles (A, an, the)?
我有以下排序函数来对图书列表进行排序:
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);
我该如何调整,以便忽略每个标题开头的文章?
您可以简单地使用一个函数removeArticles()
来检查句子中是否有多个单词,如果有,则返回第二个单词进行比较。仅对于特定单词,您需要为这些单词添加条件,例如(words[0] == 'a' || words[0] == 'the' || words[0] == 'an')
将涵盖"A"
、"An"
和"The"
:
books = ["A Whale", "The Moive", "A Good Time", "The Alphabet 2" , "The Alphabet 1", "Alphabet Soup", "Foo"];
var compare = function(a, b) {
var aTitle = a.toLowerCase(),
bTitle = b.toLowerCase();
aTitle = removeArticles(aTitle);
bTitle = removeArticles(bTitle);
if (aTitle > bTitle) return 1;
if (aTitle < bTitle) return -1;
return 0;
};
function removeArticles(str) {
words = str.split(" ");
if(words.length <= 1) return str;
if( words[0] == 'a' || words[0] == 'the' || words[0] == 'an' )
return words.splice(1).join(" ");
return str;
}
var sortedBooks = books.sort(compare);
// [ "The Alphabet 1", "The Alphabet 2", "Alphabet Soup", "Foo", "A Good Time", "The Moive", "A Whale" ]
console.log(sortedBooks);
您可以使用RegExp在比较器中移动它们。还要注意.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;
}
并将其付诸实践
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"]
相关文章:
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 在不设置协议的情况下,使用javascript/jquery更改iframe-src
- 如何在不单击javascript中的按钮的情况下触发事件
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 无法't在不使用Javascript刷新页面的情况下多次将值传递给文本框
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 如何在没有ajax的情况下将javascript动态数据发送到php变量
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 如何在不知道关键字的情况下访问javascript对象值
- 为什么在这种情况下,“This”确实充当javascript函数中的私有成员
- 如何在不保存到其他变量的情况下更改JavaScript中的值
- 在不使用PHP的情况下将表单输入值获取到Javascript中
- 如何在不预定义的情况下将javascript函数传递到另一个函数中
- 在给定 javascript 中的表头的情况下生成 TSV 文件
- 如何在不退出javascript的情况下从javascript更新网页
- 我可以在不使用乘法运算符“”的情况下进行乘法运算吗*"在JavaScript中
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- Haxe Javascript:在不使用Reflect的情况下按名称获取和设置属性
- 在不使用javascript的情况下,可以在表单字段中设置文本占位符(以提示最终用户插入特定格式)
- 为什么下面的按钮切换情况下javascript工作