javascript函数对数组长度为10后的字符串数组进行排序
数组长度超过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' ]
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或任何正数。(三个可能的值,而不是两个。)