按[field]值对javascript数组排序的顺序错误

按[field]值对javascript数组排序的顺序错误,javascript,arrays,sorting,Javascript,Arrays,Sorting,我正在实现SlickGrid,我希望允许按列对值进行排序,这是SlickGrid通过排序数组支持的,但是,当我对列(数组)进行排序时,它们并没有按“正确”的顺序排列 返回的顺序为1,10100,11199,2,20200,3,30300 尝试按标题对此网格中的任务进行排序时,问题会显示得非常清楚: 虽然我使用自己的排序规则,但不是示例中使用的排序规则: data.sort(function(a, b){ var result = a[field

我正在实现SlickGrid,我希望允许按列对值进行排序,这是SlickGrid通过排序数组支持的,但是,当我对列(数组)进行排序时,它们并没有按“正确”的顺序排列

返回的顺序为1,10100,11199,2,20200,3,30300

尝试按标题对此网格中的任务进行排序时,问题会显示得非常清楚:

虽然我使用自己的排序规则,但不是示例中使用的排序规则:

data.sort(function(a, b){
          var result = 
              a[field] === b[field] ? 0 :
              a[field] > b[field] ? 1 : -1
          ; 
          return args.sortAsc ? result : -result;
      });
问题依然存在


我的问题仅仅是如何对数组进行排序,以便标题(和其他数据)将以正确的顺序显示:1,2,310020300…

您的数字实际上是字符串,因此将进行比较。为了防止出现这种情况,请使用
parseInt(a[field],10)>parseInt(b[field],10)
您的数字实际上是字符串,因此将进行比较。为了防止这种情况,请使用
parseInt(a[field],10)>parseInt(b[field],10)
如果您只是尝试对相同类型的对象进行排序,那么就没有问题了。。。你的算法似乎是对的

但看起来您的数字实际上可能是字符串,所以它们被排序为字符串。 你可以把它们分解成数字。。ie
parseInt()、parseFloat()等

但是,如果字段是一个字符串,后跟一个数字,就像链接中的示例一样,那么它将不起作用


“数据20”
将始终小于
“数据3”
,因此您可能需要提取数字,然后按字符串和数字进行排序

如果您只是尝试对相同类型的对象进行排序,那么没有问题。。。你的算法似乎是对的

但看起来您的数字实际上可能是字符串,所以它们被排序为字符串。 你可以把它们分解成数字。。ie
parseInt()、parseFloat()等

但是,如果字段是一个字符串,后跟一个数字,就像链接中的示例一样,那么它将不起作用


“数据20”
将始终小于
“数据3”
,因此您可能需要提取数字,然后按字符串和数字进行排序

是的,我想是这样的,但是,如果我将字符串解析为int,并且它包含字母,我不会遇到麻烦吗?您可以使用另一个参数指定是将输入作为数字还是字母处理,还是执行一些检测工作(如果
/^\d+$/
匹配,则它是一个数字),谢谢!正则表达式正是我需要的胶水。这个函数不能正确地对包含数字的字符串进行排序这一事实是可以接受的,因此我在比较之前将数字字符串转换为int。希望这对其他人有帮助如果(/^\d*$/.test(a[field])&&/^\d*$/.test(b[field]){a[field]=parseInt(a[field],10)b[field]=parseInt(b[field],10)}`是的,我想是这样的,但是,如果我将字符串解析为int,我不会遇到麻烦,它包含字母?您可以使用另一个参数指定是要将输入作为数字还是字母处理,还是要执行一些检测工作(如果
/^\d+$/
匹配,则它是一个数字),谢谢!正则表达式正是我需要的胶水。这个函数不能正确地对包含数字的字符串进行排序这一事实是可以接受的,因此我在比较之前将数字字符串转换为int。希望这对其他人有帮助如果(/^\d*$/.test(a[field])&&/^\d*$/.test(b[field]){a[field]=parseInt(a[field],10)b[field]=parseInt(b[field],10)}`