前端 JS 经典:字符串比较

**题目:**比较两个字符串大小,两个字符串都是用-连接的数字,比如 1-2-33-55。比较方式是从左到右,依次比较每个数字的大小,遇到相等的数字继续往后比较,遇到不同的数字直接得到结果。

**思路:**定义一个辅助函数 walk,这是一个生成器函数,返回一个迭代器对象。每一次迭代取出字符串的一位。定义一个 compare 比较函数,将两个字符串参数转换成迭代器对象。然后循环判断每一项大小。

实现:

javascript 复制代码
const compare = (s1, s2) => {

  const iter1 = walk(s1);

  const iter2 = walk(s2);



  while (1) {

    const v1 = iter1.next();

    const v2 = iter2.next();

    if (v1.done && v2.done) {

      return 0;

    }

    if (v1.done) {

      return -1;

    }

    if (v2.done) {

      return 1;

    }

    if (v1.value > v2.value) {

      return 1;

    }

    if (v1.value < v2.value) {

      return -1;

    }

  }

};



function* walk(str) {

  let s = "";

  for (const c of str) {

    if (c === "-") {

      yield Number(s);

      s = "";

    } else {

      s += c;

    }

  }

  if (s) {

    yield Number(s);

  }

}



let str1 = "1-2-3";

let str2 = "2-1-3";

compare(str1, str2); // 返回 -1,str2 大。
相关推荐
卸任10 小时前
Vibe coding工具使用心得
前端·ai编程
brien911 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance11 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M12 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写12 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李12 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易12 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding12 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马12 小时前
前沿视界
前端
kyriewen12 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员