waterwalk

导航

 

对于数组中的字符串进行排序:

1、运用递归:

 每次停止函数需要return false


//排序函数通过字母和数字进行排序,传入参数为true为正序,传入false为倒叙
function objArr(arr,x,y){
  if(x == '备注/描述'){
    return arr;
  };


  var finall = -1;
  if(y){
    finall = 1;
  };


  function compareFunction(a,b){//字母的转码排序
    var m = parseInt(a[x]);
    var n = parseInt(b[x]);
    if( !isNaN(m) && !isNaN(n)){
      if(y){
        return m - n;
      }else{
        return n -m;
      }
    }
    else if(a[x] === b[x]){//TODO 此方法返回1,和-1都不行
      return 0;
    }
    else if(a[x] === ''){
      return 1;
    }
    else if(b[x] === ''){
      console.log(-1);
      return -1;
    }
    else if(y){
      var i = 0 ;
      stringCode(a[x],b[x],i);
      return finall;
    }
    else{
      var i = 0;
      stringCode(a[x],b[x],i);
      return finall;
    };
};
//字符串
function stringCode(a,b,i){
  if(isNaN(a.charCodeAt(i))){
    if(y){
      finall = 1;
      return false;
    };
    finall = -1;
    return false;
  };
  if(isNaN(b.charCodeAt(i))){
    if(y){
      finall = 1;
      return false;
    };
    finall = -1;
    return false;
   };
  if(a.charCodeAt(i) == b.charCodeAt(i)){
    i++;
    stringCode(a,b,i);
    }
else{
    if(y){
      finall = a.charCodeAt(i) - b.charCodeAt(i);
      return false;
    }else{
      finall = b.charCodeAt(i) - a.charCodeAt(i);
      return false;
    }
  };
};
  arr.sort(compareFunction);
  return arr;
}

 

 这个函数最后调用完后,不同的字母和数字排序没有问题,唯一的问题是我在相同的字符串调用的这个比较函数的时候,在 a[x] === b[x];我return 1、-1、-1;arr都会进行排序,排序的顺序不定!!!!

posted on 2016-10-17 18:14  waterwalk  阅读(132)  评论(0)    收藏  举报