您好我有一个文本框,其值为
<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]);
}
在应用排序之前但在所有情况下结果都相同。有人会指导我做错了吗?
答案 0 :(得分:15)
你必须传入一个比较器函数,将字符串转换为数字:
allsortedvalues = allsortedvalues.sort(function(a,b) {
return (+a) - (+b);
});
如果您的某些数组条目可能不是格式良好的数字,那么您的比较器必须变得更加复杂。
构造(+a)
涉及一元+
运算符,如果a
已经是数字,它就不会执行任何操作。但是,如果a
不是一个数字,那么当{em>解释为数字时,+a
的结果将为a
的值,或者NaN
。通过检查和解析为数字的字符串表示形式,字符串以明显的方式解释作为数字。布尔值将转换为false -> 0
和true -> 1
。值null
变为0
,undefined
为NaN
。最后,通过调用valueOf()
函数将对象引用解释为数字,如果没有帮助,则将其解释为NaN
。
如果您愿意,它等同于使用Number构造函数,如Number(a)
中所示。它与+a
完全相同。我是一个懒惰的打字员。
答案 1 :(得分:10)
如果未提供compareFunction,则通过转换对元素进行排序 它们是字符串并比较字典中的字符串(“字典” 或“电话簿”,而不是数字)命令。例如,“80”来了 在字典顺序中的“9”之前,但是数字排序9来了 80之前。
要比较数字而不是字符串,比较函数可以简单地从a:
中减去b
function compareNumbers(a, b)
{
return a - b;
}
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort