0503|937. 重新排列日志文件

0503|937. 重新排列日志文件

对 sort 的灵活运用。

var reorderLogFiles = function (logs) {
  // 保存 0 和 9 字母的code值
  const ZERO = '0'.charCodeAt(0);  // 48
  const NINE = '9'.charCodeAt(0);  // 57

  // 原地排序
  logs.sort((a, b) => {
    // 判断是否为数字日志:dig开头。
    // 思路:题干说“数字日志的所有字均由数字组成”,
    // 所以:判断最后一个字符是否为数字。
    const aDig = a.charCodeAt(a.length - 1) >= ZERO && a.charCodeAt(a.length - 1) <= NINE;
    const bDig = b.charCodeAt(b.length - 1) >= ZERO && b.charCodeAt(b.length - 1) <= NINE;
    // console.log(a, '->', aDig, '||', b, "->", bDig);

    if (aDig && bDig) return 0; // 都是数字:保留相对位置
    else if (aDig) return 1;    // 如果只有a是数字,则a排在后面;反之亦然
    else if (bDig) return -1;

    // 都是false,都是字母日志:
    // 由空格把 string 切割为 array :eg. "let1 art can" ==> ['let2', 'own', 'kit', 'dig']
    const [aSp, bSp] = [a.split(" "), b.split(" ")];
    // slice(1) 删去数组第一个成员,其为字母标识符。
    // join(" ") 把 array 合并为 string。
    // localeCompare 比较两个字符串,按照字典顺序谁应当排在前面。
    const cmp = aSp.slice(1).join(" ").localeCompare(bSp.slice(1).join(" "));
    // console.log(aSp, bSp, cmp);

    if (cmp != 0) return cmp;
    // 如果内容相同,则按照标识符排序
    return aSp[0].localeCompare(bSp[0]);
  })
  return logs;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值