javascript sort function sorting wrong
你好,我有一个文本框,它的值如下
1 | <input type="hidden" value="2,1,4,5,3,6,7,8,9,10,11,12" class="sortvalues" id="1_1_parent"> |
现在,我想获取这个文本框的值,想将这些值拆分为数组,然后作为最后的结果,我需要一个已排序的数组。
我所做的。
1 2 3 | allsortedValues = $(".sortvalues").val(); allsortedValues = allsortedValues.split(","); allsortedValues = allsortedValues.sort(); |
号
当我检查阵列时
1 | console.log(allsortedValues); |
它显示
1 | 1,10,11,12,2,3,4,5,6,7,8,9 |
。
按
我甚至用过
1 | allsortedValues = allsortedValues.split(",").map(function(x){return parseInt(x)}); |
在应用sort之前,在其他情况下,我甚至使用了EDOCX1[1]like
1 2 3 4 | for(var i = 0; i < allsortedValues.length; i++) { allsortedValues[i] = parseInt(allsortedValues[i]); } |
。
在应用排序之前,但在所有情况下,结果都是相同的。有人能指导我做错了什么吗?
您必须传递一个Comparator函数,该函数将字符串转换为数字:
1 2 3 | allsortedvalues = allsortedvalues.sort(function(a,b) { return (+a) - (+b); }); |
如果有可能您的一些数组条目不是格式良好的数字,那么您的比较器就必须变得更加复杂。
构造
它相当于使用数字构造函数,如
If compareFunction is not supplied, elements are sorted by converting
them to strings and comparing strings in lexicographic ("dictionary"
or"telephone book," not numerical) order. For example,"80" comes
before"9" in lexicographic order, but in a numeric sort 9 comes
before 80.To compare numbers instead of strings, the compare function can simply subtract b from a:
号
1 2 3 4 | function compareNumbers(a, b) { return a - b; } |
号
https://developer.mozilla.org/en-us/docs/javascript/reference/global_objects/array/sort