【问题标题】:Array sort method unexpected behavior [duplicate]数组排序方法意外行为[重复]
【发布时间】:2017-01-24 12:08:41
【问题描述】:

我有一个值为 1,10,6,8,7 的数组,我想使用 sort() 方法对其进行排序,它给出的结果如下 1,10, 6,7,8 而不是 1,6,7,8,10

我在下面写了代码:

var arr = [1,10,6,8,7];
arr.sort();
document.write(arr);

谁能知道这个?

【问题讨论】:

标签: javascript jquery arrays sorting


【解决方案1】:
var scores = [1, 10, 21, 2]; 
scores.sort(); // [1, 10, 2, 21]
// Watch out that 10 comes before 2,
// because '10' comes before '2' in Unicode code point order.

参考此链接https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

【讨论】:

    【解决方案2】:

    10 在 unicode 中位于 2 之前。您需要帮助sort() 函数确定哪个元素在哪个之前。

    arr.sort(function(a, b) {
      return a - b;
    });
    

    【讨论】:

    • 代码格式和解释代码行的句子会很棒。
    【解决方案3】:

    来自文档:

    如果没有提供 compareFunction,则通过将元素转换为字符串并按 Unicode 代码点顺序比较字符串来对元素进行排序。

    这就是为什么数字数组上的sort 是“奇怪的”:因为它比较数字的字符串表示形式。

    从 unicode 的角度来看:"10" < "2"

    【讨论】:

      【解决方案4】:

      您将获得字典排序(例如,将对象转换为字符串,并按字典顺序对其进行排序),这是 Javascript 中的默认排序行为:

      https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

      原答案:

      https://*.com/a/7000924/7462678

      【讨论】:

        【解决方案5】:

        根据 Mozilla 开发者网络,“默认排序顺序是根据字符串 Unicode 代码点。”。 10 在 Unicode 代码点顺序中位于 2 之前。您需要将比较函数传递给排序函数,该函数将比较数字。

        Array.prototype.sort - Mozilla Developer Network

        【讨论】: