Javascript数组排序比较函数奇怪的排序

时间:2017-02-04 19:08:46

标签: javascript arrays sortcomparefunction

所以我想知道我的代码有什么问题,使用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>

3 个答案:

答案 0 :(得分:0)

更改此

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

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

所以你可以比较数字和比较:

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

答案 1 :(得分:0)

将字符串与数字进行比较时,它会将两者都转换为数字,查找不同的第一个字符,然后根据该字符进行操作。

"5" > "42"

将字符串显式转换为数字以解决此问题。

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

答案 2 :(得分:0)

我建议将所有值都视为数字并返回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; }