簡體   English   中英

sort()a和b變量中的JavaScript回調函數

[英]JavaScript callback function inside sort() a and b variables

我試圖理解sort()函數如何與傳遞給它的回調函數一起工作。 更具體地說, ab的值

示例代碼:

var n = [4, 11, 2, 10, 3, 1];
    n.sort(function(a, b) {
        console.log(a);
        console.log(b);
        console.log('--')
        return a-b;
    });

結果:

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
--

第一輪我可以遵循a = 4, b = 11,易於遵循。

第二輪我可以遵循a = 11和b = 2。

但在那之后我對實際發生的事情進行了一些松散的跟蹤,例如當你到達a = 4和b = 3時。這實際上是如何工作的? 我嘗試在紙上完成它,但無法看到ab輸出中的邏輯。

你可以這樣看。 如果有兩個數字,請比較a(前一個)和b(下一個)。
如果a大於b,則將其放在b之后。
如果a小於b,則將其放在b之前。
事實上,當你有一個'a> b'的情況下,你可以返回任何正數:放一個后b。
並且,當你有一個'a <b'的情況下,你可以返回任何負數:在b之前放一個。 它實際上是一次比較2個數字。

陣列中的位置可以理解如下。 return ab的角度來看,如果你返回一個負數,則先放一個b; 如果你返回一個正數,請輸入一個后b。 負數 - 零 - 正數。

也許,您可以通過在運行時打印出n中的內容來更好地理解它。

window.n = [4, 11, 2, 10, 3, 1];
n.sort(function(a, b) {
    console.log(a);
    console.log(b);
    console.log(window.n); // You can see what is in n in the every comparison
    console.log('--')
    return a-b;
});

Chrome v64.0.3282上的結果

4
11
(6) [4, 11, 2, 10, 3, 1]
--
11
2
(6) [4, 11, 2, 10, 3, 1]
--
4
2
(6) [4, 11, 11, 10, 3, 1]
--
11
10
(6) [2, 4, 11, 10, 3, 1]
--
4
10
(6) [2, 4, 11, 11, 3, 1]
--
11
3
(6) [2, 4, 10, 11, 3, 1]
--
10
3
(6) [2, 4, 10, 11, 11, 1]
--
4 
3
(6) [2, 4, 10, 10, 11, 1]
--
2
3
(6) [2, 4, 4, 10, 11, 1]
--
11
1
(6) [2, 3, 4, 10, 11, 1]
--
10
1
(6) [2, 3, 4, 10, 11, 11]
--
4
1
(6) [2, 3, 4, 10, 10, 11]
--
3
1
(6) [2, 3, 4, 4, 10, 11]
--
2
1
(6) [2, 3, 3, 4, 10, 11]
--

(6) [1, 2, 3, 4, 10, 11] // result

您的代碼返回與以下相同的結果:

var n = [4, 11, 2, 10, 3, 1];
n.sort(function(a, b) {
    console.log(a);
    console.log(b);
    console.log('--')
    if (a > b) {
        return 1;
    } else {
        return -1;
    }  
});
(6) [1, 2, 3, 4, 10, 11] // result

要么

var n = [4, 11, 2, 10, 3, 1];
n.sort((a, b) => a > b ? 1 : -1);
(6) [1, 2, 3, 4, 10, 11] // result

看起來像修改后的冒泡排序。 當你比較每一步的數組狀態時,你可以看到發生了什么 - 我在下面添加了它們。

將索引1中的值盡可能低地移動。 (索引0-1按順序)現在將索引2中的值移動到應該的最低值。 (索引0-2按順序)現在將索引3中的值移動到應該去的最低位置。 (索引0-3是有序的)

由於我們知道有多少數組是為了使比較短路並且在比較函數不是負數時立即跳轉到下一個索引。

4
11
-- [4, 11, 2, 10, 3, 1];
11
2
-- [4, 2, 11, 10, 3, 1];
4
2
-- [2, 4, 11, 10, 3, 1];
11
10
-- [2, 4, 10, 11, 3, 1];
4
10
-- [2, 4, 10, 11, 3, 1];
11
3
-- [2, 4, 10, 3, 11, 1];
10
3
-- [2, 4, 3, 10, 11, 1];
4
3
-- [2, 3, 4, 10, 11, 1];
2
3
-- [2, 3, 4, 10, 11, 1];
11
1
-- [2, 3, 4, 10, 1, 11];
10
1
-- [2, 3, 4, 1, 10, 11];
4
1
-- [2, 3, 1, 4, 10, 11];
3
1
-- [2, 1, 3, 4, 10, 11];
2
1
-- [1, 2, 3, 4, 10, 11];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM