前端 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 大。
相关推荐
ayqy贾杰12 小时前
Claude Fable 5 提示词泄漏,抓紧学习下
前端·后端·面试
To_OC20 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
To_OC20 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
vipbic20 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy20 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志21 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble1 天前
c端系统,其实更像一个信息展示平台
前端
你怎么知道我是队长1 天前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
李姆斯1 天前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜1 天前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js