Javascript 是否有一种比I';我在做(没有引文或文章)?
我知道这里有这样的问题,但我要特别强调处理速度。我所做的已经起作用了 我有一个包含要排序的标题的数组。有些标题以双引号开头,如《困难时期的领导力》“你负责”,有些标题以a、An或类似的开头,如《对识字的集体影响》。我想忽略排序中的那些,这很好:Javascript 是否有一种比I';我在做(没有引文或文章)?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我知道这里有这样的问题,但我要特别强调处理速度。我所做的已经起作用了 我有一个包含要排序的标题的数组。有些标题以双引号开头,如《困难时期的领导力》“你负责”,有些标题以a、An或类似的开头,如《对识字的集体影响》。我想忽略排序中的那些,这很好: theArray.sort(function(a, b) { var titleA = a.title.toLowerCase(); titleA = removeCertainLeadingCharacters(
theArray.sort(function(a, b) {
var titleA = a.title.toLowerCase();
titleA = removeCertainLeadingCharacters(titleA);
var titleB = b.title.toLowerCase();
titleB = removeCertainLeadingCharacters(titleB);
return (titleA < titleB) ? -1 : (titleA > titleB) ? 1 : 0;
});
我唯一的问题是,是否有一种更快的方法可以做到这一点。如果我对一个大约800个标题的数组进行排序,而不调用removeCertainLeadingCharacter(),那么排序速度会非常快。如果我添加函数调用,那么它会变慢。速度上没有很大的阻力,但明显较慢。没有电话,基本上是即时的
所以我只是想知道是否有比我现在做的更快的方法来完成这件事
谢谢。这可能会为您节省一些时间(50%的时间),因为当您只检查对账单中的第一个单词时,不需要拆分
函数删除某些前导字符(标题){
//删除小写标题的前导引号,以及前导文章(a、the、an)
if(title.indexOf(“”)==0){
title=title.substr(1);
}
if(title.startsWith('a')){
title=title.子字符串(2);
}else if(title.startsWith('an')){
title=title.子字符串(3);
}else if(title.startsWith('the')){
title=title.子字符串(4);
}
返回标题;
}
您可以简化排序算法中的最后一行,如下所示:
return titleA - titleB;
是的,它看起来确实有点快。谢谢你指出这一点。有趣的是,这实际上完全打乱了字母排序。在尝试更改后,排序基本上是随机的。当我恢复行时,我让排序再次工作。我不知道为什么。@DougLerner怪异!你的返回行与这行做的一样如果B大于A,则返回负数;如果A大于B,则返回正数;如果它们相等,则返回0。这就是大多数排序算法的工作原理。但这其实不是一回事,对吗?在我的例子中,每次比较我都会精确返回-1、+1或0。使用您的表达式,我将返回一些未知的大小正数和负数nnumbers。这会影响整体比较吗?@DougLerner该函数只关心compareFunction结果是负、正还是零。请参阅此处的说明部分:它不起作用,因为正在进行奇怪的类型转换。将字符串与
运算符进行比较可能会起作用(假设两个字符串都转换为小写),但在JS中尝试从另一个alpha字符串中减去一个alpha字符串将得到NaN
。
return titleA - titleB;