js排序问题

一道js排序问题求大神回答
需求:先数字再是字母加数字,有字母前缀的,按字母排序
如:arr['1','20','a3','c9','b1','19','11']
排序后期望:['1','11','19','20','a3','b1','c9']

阅读 3.2k
4 个回答
likeList.sort((x,y)=>{
    if(isNaN(x) && isNaN(y)){
      return x>y
    }
    if(isNaN(x)){
      return 1
    }
    if(isNaN(y)){
      return -1
    }
    return x - y
})

前两天有人在这儿给的答案,那个答案咋不见了?

sec1:

var array = ['1','20','a3','c9','b1','19','11'];
var temp = 0;
for (var i = 0; i < array.length; i++)
{
  for (var j = 0; j < array.length - i; j++)
  {
    if (array[j] > array[j + 1])
    {
      temp = array[j + 1];
      array[j + 1] = array[j];
      array[j] = temp;
    }
  }
}
console.log(array); 

sec2:

var arr = ['1', '1a', '20','a3','c9','b1','19','11'], arrNums = [], arrLets = [] ;
var checkNum =  new RegExp('^[0-9]*$');
for( var i = 0; i < arr.length; i++){
   var item = arr[i];
   if(checkNum .test(item)){
      arrNums.push(item)
   }else{
      arrLets.push(item);  
   }
}
arrNums = arrNums.sort();
arrLets = arrLets.sort();
arr = [].concat(arrNums, arrLets);

不知道可不可以用函数式编程库、
一般涉及到计算比较多的为了考虑计算性能问题、我们会引入underscore.js
函数式编程有一个方法_.sortBy(list, iteratee, [context])
具体的规则自然可以自己定义一个、然后return出新的数组就是了、
不知道他怎么计算的、反正比自己写的快

var arr=['1','20','a3','c9','b1','19','11']
ES5:
var arrs=arr.sort(function(x,y){
       if(!isNaN(x)&&isNaN(y)){
                return false
            }else {
                return x>y
            }
    })

@小秦 感谢提醒,楼主采纳他的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题