【问题标题】:Why Javascript sort() function is not giving the expected output? [duplicate]为什么 Javascript sort() 函数没有给出预期的输出? [复制]
【发布时间】:2012-08-08 12:33:19
【问题描述】:

可能重复:
sort not working with integers?
How to sort number in javascript sort method
Array.sort() doesn't sort numbers correctly

代码:

var x = [40,100,1,5,25,10];
x.sort();

输出:

1,10,100,25,40,5

我的预期输出:

1,5,10,25,40,100

【问题讨论】:

  • 哇,这种行为真是出乎意料。

标签: javascript sorting integer


【解决方案1】:

JavaScript Array .sort() 函数默认将数组元素转换为字符串,然后再进行比较。

你可以覆盖它:

x.sort(function(e1, e2) { return e1 - e2; });

(根据第一个元素小于、等于还是大于第二个元素,传递的函数应该返回一个负数、零或正数。)

我从未见过这种语言奇怪方面的理由。

【讨论】:

  • 我认为这是因为.sort() 默认情况下必须处理任何类型的数据,包括混合类型。你会如何对[2, "10", "25f" ] 进行排序?
  • 是的,大概就是这样;通用函数必须检查整个数组以查看它是否都是数字才能更智能。
【解决方案2】:
var x = [40,100,1,5,25,10];
x.sort(function(a,b){return a-b});

【讨论】:

    【解决方案3】:

    根据MDN Array.sort

    如果未提供 compareFunction,则通过将元素转换为字符串并按字典(“字典”或“电话簿”,而不是数字)顺序比较字符串来对元素进行排序。例如,“80”按字典顺序排在“9”之前,但在数字排序中,9 排在 80 之前。

    所以你应该这样做:

    function compareNumbers(a, b)
    {
      return a - b;
    }
    var x = [40,100,1,5,25,10];
    x.sort(compareNumbers);
    

    【讨论】:

      【解决方案4】:

      它默认进行字母升序排序(第 1 个字符被排序.. 1,1_,1_,2,4_,5)并提供比较函数来改变这种行为

      更多信息可以在这里找到:http://www.w3schools.com/jsref/jsref_sort.asp

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 2019-11-13
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2022-11-27
        相关资源
        最近更新 更多