2017-09-11 62 views
0

我有一个问题关于JavaScript的sort()函数JavaScript数组排序函数不正确排序

var arr = [23,43,54,2,3,12]; 
arr.sort(); 

它的输出为[12, 2, 23, 3, 43, 54] 以及它应该是[2, 3, 12, 23, 43, 54]

+0

https://stackoverflow.com/questions/1063007/how-to-sort-an-array-of-integers-correctly – aahhaa

+2

的可能的复制[如何正确排序整数数组( https://stackoverflow.com/questions/1063007/how-to-sort-an-array-of-integers-correctly) – Brian

+1

它排序时的第一个数字,因为你的值代表字符串 – pokeybit

回答

2

这是因为您正在使用默认排序算法对数字进行排序,这会将其转换为字符串并按字典顺序进行排序。

而是通过一个函数来定义一个排序顺序,通过它的返回值。

var arr = [23,43,54,2,3,12]; 
 

 
console.log(arr.sort((a, b) => a - b));

返回一个正数朝向列表的末尾移动a

+0

这真的很有帮助。谢谢 !!! –

2

你必须指定排序功能

[12, 2, 23, 3, 43, 54].sort(function (a, b) { return a - b ; }) 

的JavaScript规范规定的排序应该执行lexicografic排序,docs

+0

你不应该返回一个布尔值。分拣机需要一个数字返回值。在某些情况下返回一个布尔值可能会导致错误的结果。 – spanky

+0

@spanky你是对的,改为解决这个反馈, –