JS 英文名排序

//写一个sortReindeer()函数,使下列数组的输入的输出为,按照英文名的姓进行排列
/*即
["Prancer Chua", "Blitzen Claus", "Cupid Foroutan", "Vixen Hall", "Donder Jonker", "Comet Karavani", "Dancer Moore", "Dasher Tonoyan"]
*/
sortReindeer(
    ["Dasher Tonoyan", 
    "Dancer Moore", 
    "Prancer Chua", 
    "Vixen Hall", 
    "Comet Karavani", 
    "Cupid Foroutan", 
    "Donder Jonker", 
    "Blitzen Claus"] 
  );

我的:(和人家比好垃圾。。)

function sortReindeer(reindeerNames){
    console.log("start");
  var reg = /\s([A-Z][a-z]*)/;
  var arr=new Array();
  var temp=0;
  for(var i=0;i<reindeerNames.length;i++){
    arr[i]=reindeerNames[i].match(reg)[1];//用正则取出姓,其实就是split(' ')[1],蠢死了
  }
      //简单选择排序(Simple Selection Sort)
      for(i=0;i<arr.length;i++){
        var k=i;
        for (var j = i+1; j < arr.length; j++) {
            if (arr[j] < arr[k]) {
                k=j;
            };
        }
        if(k!=i){
              temp = reindeerNames[i];
              reindeerNames[i]=reindeerNames[k];
              reindeerNames[k]=temp;
          temp = arr[i];
          arr[i]=arr[k];
          arr[k]=temp;
            }
        }
     console.log(reindeerNames);
     return(reindeerNames);
}
//No.1
function sortReindeer(reindeerNames){
    //调用sort方法
   reindeerNames.sort(function(a, b) { 
        return a.split(' ')[1] > b.split(' ')[1];//直接通过split方法把数组分成2份!!
  });
}
//No.2 map()????
function sortReindeer(Names){
  return Names.map(swap).sort().map(swap);    
}

function swap(name){
  return name.split(' ').reverse().join(' ');
}
//No.3 a.substr(a.lastIndexOf(' ')):取得姓
//a.localeCompare(b):如果a<b:,则 localeCompare() 返回小于 0 的数。如果a 大于 b,则该方法返回
//大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。
function sortReindeer(reindeerNames){
  return reindeerNames.sort(function(a, b) {
    return a.substr(a.lastIndexOf(' ')).localeCompare(b.substr(b.lastIndexOf(' ')));
  });
}

或者
function sortReindeer(reindeerNames){
  return reindeerNames.sort(function (x, y) {
    return x.substr(x.indexOf(" ") + 1) > y.substr(y.indexOf(" ") + 1);
  });
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值