在我正在阅读的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;的返回值。功能正在影响阵列! 谢谢朋友们!
答案 0 :(得分:1)
来自MDN article:
如果提供
compareFunction
,则对数组元素进行排序 根据比较函数的返回值。如果a
和b
是比较的两个要素,然后:
- 如果
compareFunction(a, b)
小于0
,请将a
排序为低于b
的索引,即a
首先出现。- 如果
compareFunction(a, b)
返回0
,则a
和b
相互之间保持不变,但会针对所有不同的方式进行排序 元素。注意: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}的内部细节如何实际上工作。