javascript排序函数排序错误

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, 10, 11, 12, 2.....排序数组

我甚至用过

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]);
}

在应用排序之前,但在所有情况下,结果都是相同的。有人能指导我做错了什么吗?

  • stackoverflow.com/questions/1063007/&hellip;可能重复
  • 您的排序工作正常,javascript将您的输入视为字符串而不是数字,因此会出现意外的行为。有关正确的解决方案,请参见@pointy的答案。


您必须传递一个Comparator函数,该函数将字符串转换为数字:

1
2
3
allsortedvalues = allsortedvalues.sort(function(a,b) {
  return (+a) - (+b);
});

如果有可能您的一些数组条目不是格式良好的数字,那么您的比较器就必须变得更加复杂。

构造(+a)涉及一元+运算符,如果a已经是一个数字,它就不起任何作用。但是,如果a不是数字,那么当解释为数字时,+a的结果要么是a的值,要么是NaN的值。通过将字符串作为数字的字符串表示进行检查和分析,可以明显地将字符串解释为数字。布尔值将转换为false -> 0true -> 1。值null变为0undefined变为NaN。最后,一个对象引用通过调用它的valueOf()函数被解释为一个数字,否则NaN函数无效。

它相当于使用数字构造函数,如Number(a)中所述,如果您愿意的话。它的作用与+a完全相同。我是个懒惰的打字员。

  • 我想(+a)的东西可能不是绝对必要的,但我觉得最好突出一点正在发生的事情。
  • (+)的SES看起来很混乱。如果你想直截了当的话,我建议你使用Number(a)-Number(b)
  • @THG435同意,我更喜欢人类语言:)
  • 就我个人而言,我认为只有return a - b;//compare two numbers加上评论就足够清楚了。
  • À;查村儿子去&251;T:-)
  • 很简单的解决方案
  • (+a)只是在使用coersion,如果你在编写javascript,你应该理解这个功能。不过,这个评论让我想知道,(+a)是否与Number(a)一致?也就是说,在这两种情况下,口译员都做同样的事情吗?
  • @Jamessumners很抱歉晚了近5年,但是的,+a将做与Number(a)完全相同的事情。


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

  • 嗯,我回答了实际问题:"javascript排序不正确,我做错了什么?"这不需要提供正确的排序功能。这在相关文档中,OP应该清楚地阅读。