Javascript排序函数排序错误

javascript sort function sorting wrong

本文关键字:排序 错误 函数 Javascript      更新时间:2023-09-26

您好,我有一个文本框,其值为

<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 -> 0true -> 1null变为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