Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数对数组长度为10后的字符串数组进行排序_Javascript_Arrays_Sorting - Fatal编程技术网

javascript函数对数组长度为10后的字符串数组进行排序

javascript函数对数组长度为10后的字符串数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,数组长度超过10后,数组排序函数的行为异常。下面粘贴了代码 var keys = [ 'CHECKSUMHASH', 'CUST_ID', 'EMAIL', 'TEST', 'INDUSTRY_TYPE_ID', 'REQUEST_TYPE', 'CHANNEL_ID', 'MOBILE_NO', 'ORDER_ID', 'payt_STATUS' ]

数组长度超过10后,数组排序函数的行为异常。下面粘贴了代码

var keys = [ 
      'CHECKSUMHASH',
      'CUST_ID',
      'EMAIL',
      'TEST',
      'INDUSTRY_TYPE_ID',
      'REQUEST_TYPE',
      'CHANNEL_ID',
      'MOBILE_NO',
      'ORDER_ID',
      'payt_STATUS'
       ]

    keys.sort(function(a,b){ return a.toLowerCase() > b.toLowerCase()})

    outputs 
    [ 'CHANNEL_ID',
      'CHECKSUMHASH',
      'CUST_ID',
      'EMAIL',
      'INDUSTRY_TYPE_ID',
      'MOBILE_NO',
      'ORDER_ID',
      'payt_STATUS',
      'REQUEST_TYPE',
      'TEST' ]
但向数组中添加一个额外的字符串并使数组长度大于10的行为很奇怪

var keys = [ 
  'CHECKSUMHASH',
  'CUST_ID',
  'EMAIL',
  'TEST',
  'INDUSTRY_TYPE_ID',
  'REQUEST_TYPE',
  'CHANNEL_ID',
  'MOBILE_NO',
  'ORDER_ID',
  'payt_STATUS',
  'a'
   ]

keys.sort(function (a, b) {
        return a.toLowerCase() > b.toLowerCase();
    });
["REQUEST_TYPE", "a", "CHANNEL_ID", "CHECKSUMHASH", "CUST_ID", "EMAIL", "INDUSTRY_TYPE_ID", "MOBILE_NO", "ORDER_ID", "payt_STATUS", "TEST"]

我希望“a”比“请求类型”排在第一位。请解释此行为。

您的排序功能不正确,请尝试以下操作:

keys.sort(function (a, b) {
    if (a.toLowerCase() > b.toLowerCase())
        return 1;
    else if (a.toLowerCase() < b.toLowerCase())
        return -1;
    else return 0;
});
keys.sort(函数a、b){
if(a.toLowerCase()>b.toLowerCase())
返回1;
else if(a.toLowerCase()

编辑:正如@T.J.Crowder提到的,如果第一个参数较大,排序函数应该返回正数(1);如果第一个参数较小,则返回负数(-1);如果它们相等,则返回0;不是真的或假的。在这种情况下,使用他建议的localeCompare方法可能会更好,因为如果需要,localeCompare可以处理不同的语言,并且可以节省编写代码的时间。

您从
排序
回调返回的值无效。如果参数相等,则回调应返回
0
;如果第一个参数比第一个参数“小”,则返回负数;如果第一个参数比第二个参数“大”,则返回正数

String#localeCompare
可以为您提供正确的值:

var键=[
“CHECKSUMHASH”,
“客户ID”,
“电子邮件”,
"测试",,
“行业类型ID”,
“请求类型”,
“频道ID”,
"流动电话号码",,
“订单号”,
“支付状态”,
“a”
]
键。排序(功能(a、b){
返回a.toLowerCase().localeCompare(b.toLowerCase());
});
log(JSON.stringify(keys))


排序的预期结果不是true或false,而是-1 0 1。你会在IE中遇到问题的。不管怎样,结果似乎不是有序的,对吗?正如T.J.Crowder提到的,如果第一个参数较大,排序函数应该返回1,如果第一个参数较小,则返回1,如果第一个参数相等,则返回0;如果第一个参数较大,则返回0;如果第一个参数较小,则返回1;如果第一个参数相等,则返回0;不是真或假“不,我说的是0、负数或正数。这是一个重要的区别。例如,按相反顺序对一个数字数组进行排序就是
。谢谢TJ Crowder,但你知道为什么在10个数组长度之后它会失败吗?真与假10被视为布尔值。@sudhirbaru:如果你写得正确,10之后它不会失败,再次,
sort
的回调不只是返回值true/false或1/0。它是任何负数、0或任何正数。(三个可能的值,而不是两个。)