我有一个数值 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);
有人可以对此有所了解吗?
答案 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
原始答案:
答案 4 :(得分:0)
根据Mozilla开发者网络,&#34;默认排序顺序是根据字符串Unicode代码点。&#34;。 10以Unicode代码点顺序出现在2之前。您需要将比较函数传递给sort函数,该函数将比较数字。