数组排序方法意外行为

时间:2017-01-24 12:08:41

标签: javascript jquery arrays sorting

我有一个数值 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);

Snap code

有人可以对此有所了解吗?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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 :(得分:0)

来自文档:

  

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

这就是数字数组上的sort“怪异”的原因:因为它比较了数字的字符串表示。

以unicode的观点:"10" < "2"

答案 3 :(得分:0)

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

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

原始答案:

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

答案 4 :(得分:0)

根据Mozilla开发者网络,&#34;默认排序顺序是根据字符串Unicode代码点。&#34;。 10以Unicode代码点顺序出现在2之前。您需要将比较函数传递给sort函数,该函数将比较数字。

Array.prototype.sort - Mozilla Developer Network