JavaScript sort function which takes a parameter允许传递函数。
例如:
var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return a - b}) //Array now becomes [7, 8, 25, 41]
代码怎么样?
function(a,b){
return a - b
}
被解释为提升?它应该分为三种情况,< 0
,== 0
和> 0
,但当a
和b
可以是什么时,这有什么意义呢?
谢谢!
答案 0 :(得分:6)
回答你的问题的原因特别棘手,或者至少是详细的,因为没有规范说明浏览器应该实现哪种排序算法。因此,具体告诉您它在一个浏览器上的工作原理可能会因浏览器而异,甚至会随着时间的推移而发生变化。
它的要点是,你想把“a”和“b”视为任何两个值。如果要返回“a” - “b”的结果,那么您的排序按升序排列。如果你做“b” - “a”,那么它按降序排列。
制作自己的排序函数的好处是,您可以在单独的函数中处理它们之后比较“a”和“b”的值。因此,假设您要按摄氏温度值排序,但您的数组仅在华氏温度下排序。你可以这样做:
.sort(function(a,b){ return to_fahrenheit(a) - to_fahrenheit(b);}
答案 1 :(得分:5)
函数sort
会多次调用compareFunction
函数,并将项目a
和b
传递给它。这将发生多次,直到数组被排序。
比较功能应返回:
a == b
; a > b
; b < a
,则为负数。现在,让我们看一下代码中的函数,我们有a - b =
:
a == b
; a > b
; b < a
,则为负数。因此它返回预期的结果,数组将被正确排序。
有关详细信息,请查看documentation。
答案 2 :(得分:5)
var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return a - b}) //Array now becomes [7, 8, 25, 41]
只需将其更改为
即可var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){console.log("comparing " + a + ", " + b);return a - b}) //Array now becomes [7, 8, 25, 41]
在控制台日志中尝试上述代码后,您将看到以下结果
var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){console.log("comparing " + a + ", " + b);return a - b}) //Array now becomes [7, 8, 25, 41]
被解释为提升?它应该分为三种情况,&lt; 0,== 0和&gt; 0;但是当a和b可以是任何东西时,这有什么意义呢?
第一次比较:25,8
现在,让我们回答你对如何选择a,b的价值的疑问。当您运行代码时,您会看到第一次比较是在25,8之间进行的,如果结果为正,则表示8更小。所以它只是将它重新命令为8,25。
第二次比较:25,7
接下来在25,7之间进行比较,这是因为如果结果为负,则第二个数字将在25之后放置,并且将完成三个数字的排序。
但情况有所不同,现在结果又是积极的。该阵列尚未重新订购
8, 7, 25
之后再次执行测试,直到发现条件为正。所以现在比较8,7,结果再次为负。
该阵列再次将自己重新命令为
7, 8, 25
第三次比较:25,41
现在,在最后的比较中,结果是积极的,这意味着41大于25.
因此数组重新排列
7,8,25,41
答案 3 :(得分:2)
因为如果b
大于a
,它将小于0.如果a == b
,它将返回0.否则它将是一个正数。
答案 4 :(得分:2)
该功能需要2个参数(a,b)。此函数从b中减去a并返回结果。如果返回值为
正数 - a是大于b
的数字
否定 - a是小于b
的数字
零 - a等于b
基于浏览器的行为有所不同:请参阅不同浏览器生成的输出:
var numArray = [20,1,10,2,3];
numArray.sort(function(a,b) {
document.write("a = " + a + ", b = " + b + "<br />");
return a-b}
);
output on firefox :
a = 20, b = 1
a = 20, b = 10
a = 1, b = 10
a = 2, b = 3
a = 20, b = 2
a = 1, b = 2
a = 10, b = 2
a = 10, b = 3
output on chrome:
a = 20, b = 1
a = 20, b = 10
a = 1, b = 10
a = 20, b = 2
a = 10, b = 2
a = 1, b = 2
a = 20, b = 3
a = 10, b = 3
a = 2, b = 3
希望这会有所帮助!!
答案 5 :(得分:1)
通过示例更容易理解。让我们研究每个可能的案例:
a - b
是-10
,按照惯例,如果a < b
我们会返回负值,所以我们很好。a - b
是10
,按照惯例,如果a > b
我们会返回正值,所以我们仍然很好。a - b
是0
,按照惯例,如果0
我们会返回a == b
,并且一切都按预期工作!一般来说:如果a < b
,a - b
将永远为负;如果a > b
,a - b
将始终为正;如果a == b
,则a - b
始终为0
,只要a
和b
为整数值。
答案 6 :(得分:0)
var a = [5,2,1,3,9,6];
console.log(a.sort(function(a,b){console.log(a+"," +b); return a>b;}));
Result:
5,2 => create array [2,5]
5,1 => need to check 2 and 1. [2,5], [1,5]
2,1 => push 1 before 2? isOk? => OK [1,2,5]
5,3 => need to check 1,2 with 3 before 5 [1,2,5], [3,5]
2,3 => push 3 after 2 and before 5 => OK [1,2,3,5]
5,9 => [1,2,3,5,9]
9,6 => [1,2,3,5,9], [6,9]
5,6 => [1,2,3,5,6,9]