前端 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 大。
相关推荐
Neweee14 小时前
JavaScript进阶内容详解
前端
大鸡爪14 小时前
Vue3 组件库实战(五):Icon 图标组件的设计与实现
前端·vue.js
bluceli14 小时前
前端测试实战指南:构建高质量代码的完整体系
前端·测试
行走的陀螺仪14 小时前
前端公共库开发保姆级路线:从0到1复刻VueUse官方级架构(pnpm+Turbo+VitePress)
前端·架构
顽固_倔强14 小时前
深入理解 Vue3 数据绑定实现原理
前端·面试
前端付豪14 小时前
组件拆分重构 App.vue
前端·架构·代码规范
Wect14 小时前
React 更新触发原理详解
前端·react.js·面试
cxxcode14 小时前
Web 帧渲染与 DOM 准备
前端
光影少年14 小时前
React Hooks的理解?常用的有哪些?
前端·react.js·掘金·金石计划
大鸡爪14 小时前
Vue3 组件库实战(七):从本地到 NPM:版本管理与自动化发布指南(下)
前端·vue.js