Javascript排序函数排序错误
javascript sort function sorting wrong
您好,我有一个文本框,其值为
<input type="hidden" value="2,1,4,5,3,6,7,8,9,10,11,12" class="sortvalues" id="1_1_parent">
现在我想取这个文本框的值,想把值分割成数组,然后作为最后的结果,我需要一个排序的数组。
我所做的。
allsortedValues = $(".sortvalues").val();
allsortedValues = allsortedValues.split(",");
allsortedValues = allsortedValues.sort();
检查数组
时 console.log(allsortedValues);
显示
1,10,11,12,2,3,4,5,6,7,8,9
排序数组为1, 10, 11, 12, 2.....
我甚至用过
allsortedValues = allsortedValues.split(",").map(function(x){return parseInt(x)});
在应用排序之前,在其他情况下,我甚至使用parseInt
,如
for(var i = 0; i < allsortedValues.length; i++) {
allsortedValues[i] = parseInt(allsortedValues[i]);
}
在应用sort之前,但在所有情况下结果都是相同的。有人能指点我哪里做错了吗?
您必须传入一个将字符串转换为数字的比较器函数:
allsortedvalues = allsortedvalues.sort(function(a,b) {
return (+a) - (+b);
});
如果有可能某些数组条目不是格式良好的数字,那么比较器将不得不变得更复杂。
结构(+a)
涉及一元+
运算符,如果a
已经是一个数字,它不做任何事情。然而,如果a
不是数字,+a
的结果要么是被解释为时a
的值,要么是NaN
。字符串以一种显而易见的方式解释为数字,即作为数字的字符串表示进行检查和解析。布尔值将被转换为false -> 0
和true -> 1
。null
变为0
, undefined
变为NaN
。最后,对象引用通过调用其valueOf()
函数被解释为一个数字,如果没有帮助,则调用NaN
函数。
如果您愿意,它相当于使用Number构造函数,如Number(a)
所示。它做的事情与+a
完全相同。我是个懒惰的打字员。
如果没有提供compareFunction,则通过转换对元素排序将它们转换为字符串并比较字典中的字符串("dictionary"或者"电话簿",";不是数字)顺序。例如,"80"来了在"9";按字典顺序排列,但以数字排序出现在80年之前。
要比较数字而不是字符串,compare函数可以简单地用a减去b:
function compareNumbers(a, b)
{
return a - b;
}
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort 相关文章:
- Jslint 无法识别错误排序函数的选项
- 按 [field] 值对 javascript 数组进行排序会给出错误的顺序
- 使用可排序表时出现d3.v3错误
- jQueryUI可拖动+可排序错误(无法读取未定义的属性'选项')
- Javascript中的快速排序-错误过多的递归
- 排序出现Javascript错误
- Javascript排序函数错误地更改了元素'数组中的位置
- JavaScript 排序顺序错误
- 数字数组排序错误
- Jquery 错误地按 id 对
- 进行排序
- ExtJS分组网格排序错误
- a不同列列表的未定义或空引用的数据排序错误
- IE 7/8 javascript排序错误“;应为“数字”;
- js数据表重新排列后排序错误
- 如何解决Chrome中VIS Timeline组排序错误
- Javascript插入排序错误
- 折射率排序错误
- Javascript排序函数排序错误
- 拖动多个元素时出现jQuery可排序错误
- 自定义脚本包排序错误