关于数组中字符串的排序有什么更好的解决方法么
关于数组中字符串的排序有什么更好的解决办法么
一含有各种字符的数组(数字和大写字母为主),要求数字排在在字母之后,整体为升序排序,不知有什么更好的办法呢?或者以下代码可以做哪些优化?
------解决思路----------------------
那是我理解错了。
如果是这样的话,好像只能逐字符比较了。
一含有各种字符的数组(数字和大写字母为主),要求数字排在在字母之后,整体为升序排序,不知有什么更好的办法呢?或者以下代码可以做哪些优化?
var arry=["STEWARTS RT BEER 6/4/12 NR",
"7-UP 4/6/8 CN",
"1217-UP TEN 2/12 CN",
"DIET 7-UP 4/6/8 CN",
"1a1",
"FIJI 2/4/16.9 PET",
"FIJI 6/6/300 ML",
"FIJI 24/16.9 PET",
"7-UP TEN 2/12 CN",
"217-UP TEN 2/12 CN"];
var blnCheck = false;
var i = arry.length,j;
while(i>0){
for(j=0;j<i-1;j++){
len = Math.min(arry[j].length,arry[j+1].length);
for(k=0;k<len;k++){
//若arry[j][K]为数字,j+1不为数字 交换顺序
if((48<=arry[j][k].charCodeAt()&&arry[j][k].charCodeAt()<=57)&&(arry[j+1][k].charCodeAt()<47||arry[j+1][k].charCodeAt()>57)){
blnCheck = true;
break;
}
/*若arry[j][K]为数字,j+1为数字
*或arry[j][K]不为数字,i+1不为数字
* j>j+1 交换并跳出 j<j+1不交换
*/
if(((48<=arry[j][k].charCodeAt()&&arry[j][k].charCodeAt()<=57)&&(48<=arry[j+1][k].charCodeAt()&&arry[j+1][k].charCodeAt()<=57))||(arry[j][k].charCodeAt()<47||arry[j][k].charCodeAt()>57)&&(arry[j+1][k].charCodeAt()<47||arry[j+1][k].charCodeAt()>57)){
if(arry[j][k]>arry[j+1][k]){
blnCheck = true;
break;
}else if(arry[j][k]<arry[j+1][k]){
break;
}
}
//若arry[j][K]不为数字,j+1为数字 直接跳出,不需要交换
if((arry[j][k].charCodeAt()<47||arry[j][k].charCodeAt()>57)&&(47<arry[j+1][k].charCodeAt()&&arry[j+1][k].charCodeAt()<58)){
break;
}
}
if (blnCheck) {
tempExchangVal = arry[j];
arry[j] = arry[j + 1];
arry[j + 1] = tempExchangVal;
}
blnCheck = false;
}
i--;
}
//打印结果
arry.forEach(function(e){
document.write("</br>"+e+"</br>");
});
------解决思路----------------------
那是我理解错了。
如果是这样的话,好像只能逐字符比较了。