Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一种比I';我在做(没有引文或文章)?_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 是否有一种比I';我在做(没有引文或文章)?

Javascript 是否有一种比I';我在做(没有引文或文章)?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我知道这里有这样的问题,但我要特别强调处理速度。我所做的已经起作用了 我有一个包含要排序的标题的数组。有些标题以双引号开头,如《困难时期的领导力》“你负责”,有些标题以a、An或类似的开头,如《对识字的集体影响》。我想忽略排序中的那些,这很好: theArray.sort(function(a, b) { var titleA = a.title.toLowerCase(); titleA = removeCertainLeadingCharacters(

我知道这里有这样的问题,但我要特别强调处理速度。我所做的已经起作用了

我有一个包含要排序的标题的数组。有些标题以双引号开头,如《困难时期的领导力》“你负责”,有些标题以a、An或类似的开头,如《对识字的集体影响》。我想忽略排序中的那些,这很好:

    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;