js按照“数字-字符-汉字拼音”排序

方法一:sort()

不传参:是按照字符编码的顺序进行排序(如有必要应把数组的元素都转换成字符串)

传参:需要提供比较函数,比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。
let  arr = ['张三','李四ll','王五ww', '阿狸', '咚咚','1', '2', '3','a', 'b'];
let result = arr.sort();
console.log(result)

打印结果:
在这里插入图片描述
方法二:localeCompare()

(stringObject.localeCompare(target))如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

ocaleCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。
注意:把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。

//本地特定排序规则对字符串数组进行排序
let  arr = ['张三','李四ll','王五ww', '阿狸', '咚咚','1', '2', '3','a', 'b'];
let result = arr.sort((a, b)=>{
        return a.localeCompare(b)
 });
console.log(result)

在这里插入图片描述
还需要进一步处理,才能实现需求。

let result = arr.sort((a, b)=>{
 let n = !isNaN(a - 0);
  let n2 = !isNaN(b - 0);
  // 数字优先
  if (n && n2) {
    return a - b;
  } else if (n) {
    return -1;
  } else if (n2) {
    return 1;
  } 
  // 将含有汉字的使用localeCompare排序
  let e = escape(a).indexOf("%u") > -1
  let e2 = escape(b).indexOf("%u") > -1
  //用escape来判断字符串中是否有汉字实际上并不完全准确
  
  //let reg = new RegExp("[\\u4E00-\\u9FFF]+","g")
  //let e = reg.test(a);
  //let e2 = reg.test(b)
  //使用正则后,对于纯汉字的字符排序有些出入,因此暂时不考虑这种方法
  if (e && e2) {
    return a.localeCompare(b);
  } else if (e) {
    return 1;
  } else if (e2) {
    return -1;
  }
  return a.localeCompare(b);
});

结果同sort()方法一致
在这里插入图片描述
//另附上正则判断是否汉字的返回结果
在这里插入图片描述
欢迎指出需要改进的地方🎈!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值