我试图理解该sort()函数如何与传递给它的回调函数一起工作.更具体地说,a和的值b
示例代码:
var n = [4, 11, 2, 10, 3, 1];
n.sort(function(a, b) {
console.log(a);
console.log(b);
console.log('--')
return a-b;
});
Run Code Online (Sandbox Code Playgroud)
结果:
4
11
--
11
2
--
4
2
--
11
10
--
4
10
--
11
3
--
10
3
--
4
3
--
2
3
--
11
1
--
10
1
--
4
1
--
3
1
--
2
1
--
Run Code Online (Sandbox Code Playgroud)
第一轮我可以跟随a= 4,b= 11,很容易遵循.
第二轮我可以跟随a= 11和b= 2.
但在那之后,我对实际发生的事情进行了一些松散的跟踪,例如当你到达a= 4和b= 3时.这实际上是如何工作的?我尝试在纸上完成它,但无法看到输出中的逻辑a和b.
你可以这样看。当你有两个数字时,比较 a(前一个)和 b(下一个)。
\n如果a大于b,则将其放在b后面。
\n如果a小于b,则将其放在b之前。
\n事实上,当你遇到“a > b”的情况时,你可以返回任何正数:将 a 放在 b 之后。
\n并且,当出现“a < b”情况时,您可以返回任何负数:将 a 放在 b 之前。\n它本质上是一次比较 2 个数字。
数组中的位置可以理解如下。\n从以下角度来看return a-b,如果返回负数,则将 a 放在 b 之前;如果返回正数,则将 a 放在 b 之后。\n负数 - 零 - 正数。
也许,你可以通过在运行时打印出n中的内容来更好地理解它。
\n\nwindow.n = [4, 11, 2, 10, 3, 1];\nn.sort(function(a, b) {\n console.log(a);\n console.log(b);\n console.log(window.n); // You can see what is in n in the every comparison\n console.log('--')\n return a-b;\n});\nRun Code Online (Sandbox Code Playgroud)\n\nChrome v64.0.3282 上的结果
\n\n4\n11\n(6)\xc2\xa0[4, 11, 2, 10, 3, 1]\n--\n11\n2\n(6)\xc2\xa0[4, 11, 2, 10, 3, 1]\n--\n4\n2\n(6)\xc2\xa0[4, 11, 11, 10, 3, 1]\n--\n11\n10\n(6)\xc2\xa0[2, 4, 11, 10, 3, 1]\n--\n4\n10\n(6)\xc2\xa0[2, 4, 11, 11, 3, 1]\n--\n11\n3\n(6)\xc2\xa0[2, 4, 10, 11, 3, 1]\n--\n10\n3\n(6)\xc2\xa0[2, 4, 10, 11, 11, 1]\n--\n4 \n3\n(6)\xc2\xa0[2, 4, 10, 10, 11, 1]\n--\n2\n3\n(6)\xc2\xa0[2, 4, 4, 10, 11, 1]\n--\n11\n1\n(6)\xc2\xa0[2, 3, 4, 10, 11, 1]\n--\n10\n1\n(6)\xc2\xa0[2, 3, 4, 10, 11, 11]\n--\n4\n1\n(6)\xc2\xa0[2, 3, 4, 10, 10, 11]\n--\n3\n1\n(6)\xc2\xa0[2, 3, 4, 4, 10, 11]\n--\n2\n1\n(6)\xc2\xa0[2, 3, 3, 4, 10, 11]\n--\n\n(6)\xc2\xa0[1, 2, 3, 4, 10, 11] // result\nRun Code Online (Sandbox Code Playgroud)\n\n您的代码返回与以下相同的结果:
\n\nvar n = [4, 11, 2, 10, 3, 1];\nn.sort(function(a, b) {\n console.log(a);\n console.log(b);\n console.log('--')\n if (a > b) {\n return 1;\n } else {\n return -1;\n } \n});\n(6)\xc2\xa0[1, 2, 3, 4, 10, 11] // result\nRun Code Online (Sandbox Code Playgroud)\n\n或者
\n\nvar n = [4, 11, 2, 10, 3, 1];\nn.sort((a, b) => a > b ? 1 : -1);\n(6)\xc2\xa0[1, 2, 3, 4, 10, 11] // result\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |