这个函数如何与javaScript中的sort方法交互?

时间:2014-03-12 16:49:42

标签: javascript

在我正在阅读的javaScript书中,它提供了一个方便的函数,它有助于sort方法以正确的顺序输出值(在数字的情况下)。

var values = [0,1,5,10,15];
values.sort();
console.log(values); //outputs 0,1,10,15,5

function compare (value1, value2){
    if (value1 < value2){
        return -1;
}    else if (value1 > value2){
        return 1;
}    else {
        return 0;
}

var values = [0,1,5,10,15];
values.sort(compare);
console.log(values); //outputs 0,1,5,10,15

我知道最终会发生什么,但我对比较&#39;功能正在做到这一点!主要是因为我不确定&#39;比较&#39;的返回值。功能正在影响阵列! 谢谢朋友们!

2 个答案:

答案 0 :(得分:1)

来自MDN article

  

如果提供compareFunction,则对数组元素进行排序   根据比较函数的返回值。如果ab   是比较的两个要素,然后:

     
      
  • 如果compareFunction(a, b)小于0,请将a排序为低于b的索引,即a首先出现。
  •   
  • 如果compareFunction(a, b)返回0,则ab相互之间保持不变,但会针对所有不同的方式进行排序   元素。注意:ECMAscript标准不保证这一点   行为。
  •   
  • 如果compareFunction(a, b)大于0,请将b排序为低于a的索引。
  •   

然后,如果要对数字进行排序,可以使用

[0,1,5,10,15].sort(function(a,b) {
    return a-b;
});

答案 1 :(得分:1)

当您将自定义比较函数传递给.sort()函数时,它使用该函数来决定数组中任何两个元素中的哪一个属于另一个之前或之后。更详细地说,.sort()使用算法将数组中的所有元素与其他元素进行比较,每次需要知道数组的元素A或元素B是否属于另一个元素时调用自定义函数。当它收集有关数组中各种元素如何相互比较的信息时,它会将数组按顺序排列。

这样做的好处是,用于对数组进行排序的内务处理细节和算法完全在内部完成.sort()函数,您只需提供比较逻辑即可实现自定义排序顺序。当你决定返回一个正的,0或负的返回值时,那就是比较函数告诉.sort()函数传递给它的两个值中的哪一个属于数组中较早的值的方式并且.sort()函数使用该信息将项目按正确的顺序放置在最终排序的数组中。具体取决于它实际使用的排序算法。

如果您对.sort()内部如何运作感到好奇,那么详细信息取决于具体的javascript实现,但here's an answer会讨论其中一些细节并使用mergesort和quicksort等术语这是众所周知的排序算法。

javascript回调设计的优点在于您可以使用.sort()并提供自定义比较功能来创建自己的排序顺序,而无需了解{{1}的内部细节如何实际上工作。