javascript排序函数排序错误

标签 javascript sorting

<分区>

你好,我有一个文本框,其值如下

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

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

最佳答案

您必须传入一个将字符串转换为数字的比较器函数:

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

如果您的某些数组条目可能不是格式正确的数字,那么您的比较器将不得不变得更加复杂。

构造 (+a) 涉及一元 + 运算符,如果 a 已经是一个数字,它不会做任何事情。但是,如果 a 不是 数字,+a 的结果将是 a 的值,当 < em>解释为 为数字,否则为 NaN。字符串以显而易见的方式被解释为数字,即通过检查和解析为数字的字符串表示形式。 bool 值将转换为 false -> 0true -> 1。值 null 变为 0undefinedNaN。最后,通过调用对象引用的 valueOf() 函数将对象引用解释为一个数字,如果没有帮助,则将其解释为 NaN

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

关于javascript排序函数排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765236/

相关文章:

javascript - 如何在javascript中过滤数据

java - 时间排序器 : 12 hour clock

javascript - 哪种解决方案更适合将 "this"参数传递给 javascript 事件处理程序

javascript - 如果没有用户给定的值React如何提交defaultValue

javascript - 使用rateYo插件进行星级评定我希望我的星星显示为完整的。

mysql - 使用 IN() 选择查询且不进行任何排序

javascript - 使用 JQuery 排序插入

php - 如何在 ajax 脚本中将变量从表单传递到 php 页面?

javascript - 按钮点击在移动设备上不起作用

javascript - 按嵌套属性对 JSONarray 进行排序