簡體   English   中英

Javascript數組排序比較函數奇怪的排序

[英]Javascript Array sort compare function weird ordering

所以我想知道我的代碼有什么問題,得到帶有compare參數的排序返回所有數字的正確順序,但是5.我感覺它與我如何取消數字12,4,94和1有關但我是一個完整的新手,我很困惑。 提前致謝!

<!DOCTYPE html>
<html>
<head>
    <title>Array Manipulation:Sort</title>
    <script type="text/javascript">

        var parts = [];

        parts.push("5", "42", "12");

        var removed = parts.pop();

        alert(removed);


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

        parts.unshift(12, 4, 94, 1);

        alert(parts.sort());            //1, 12, 4, 42, 5, 94
        alert(parts.sort(compare));     //1, 4, 12, 42, 5, 94


    </script>
</head>
</html>

改變這個

var parts = [];
parts.push("5", "42", "12");

var parts = [];
parts.push(5, 42, 12);

所以你可以比較數字和比較:

function compare(value1, value2) {
    return value1 - value2;
}

將字符串與數字進行比較時,它會將兩者都轉換為數字,查找不同的第一個字符,然后根據該字符進行操作。

"5" > "42"

將字符串顯式轉換為數字以解決此問題。

    function compare(value1, value2) {
        value1 = +value1;
        value2 = +value2;

我建議將所有值都視為數字並返回delta,並使用隱式類型轉換為數字。

function compare(value1, value2) {
    return value1 - value2;
}

 function compare(value1, value2) { return value1 - value2; } var data = [12, 4, 94, 1, "5", "42"]; data.sort(compare); console.log(data); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

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

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