2015-10-16 63 views
0

我有以下阵列数组排序没有如预期

temp = [1230, 900, 1000, 2130, 2400] 

和使用temp.sort()按值进行排序,看看它使用的console.log时,其给出以下

[1000, 1230, 2130, 2400, 900] 

本应该做像

[900, 1000, 1230, 2130, 2400] 

有什么不对或需要使用其他方法吗?

+1

['Array.prototype.sort()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/数组/排序):“如果未提供compareFunction,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来排序元素。” – Andreas

回答

1

应该通过Unicode代码点顺序将它们转换为字符串和比较字符串使用如果没有提供compareFunction,元素进行排序Array.prototype.sort()compareFunction

。例如,在数字排序中,9出现在80之前,但由于数字被转换为字符串,“80”以Unicode顺序出现在“9”之前。

var temp = [1230, 900, 1000, 2130, 2400]; 
 
temp.sort(function(a, b) { 
 
    return a - b; 
 
}) 
 

 
snippet.log(temp)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

作为解释:默认情况下,排序函数按Unicode代码点排序,在这种情况下,“9”排在“2”之后。 – Jacob

+1

来自复本:_比较函数应返回-1,0或+1。 a> b只会返回true或false_ – mplungjan