前端 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 大。
相关推荐
wangbing11253 分钟前
ES6 (ES2015)新增的集合对象Set
前端·javascript·es6
nvd1120 分钟前
企业级 LLM 实战:在受限环境中基于 Copilot API 构建 ReAct MCP Agent
前端·copilot
Dragon Wu29 分钟前
TailWindCss cva+cn管理样式
前端·css
烤麻辣烫34 分钟前
Web开发概述
前端·javascript·css·vue.js·html
Front思1 小时前
Vue3仿美团实现骑手路线规划
开发语言·前端·javascript
徐同保1 小时前
Nano Banana AI 绘画创作前端代码(使用claude code编写)
前端
Ulyanov1 小时前
PyVista与Tkinter桌面级3D可视化应用实战
开发语言·前端·python·3d·信息可视化·tkinter·gui开发
计算机程序设计小李同学1 小时前
基于Web和Android的漫画阅读平台
java·前端·vue.js·spring boot·后端·uniapp
干前端1 小时前
Message组件和Vue3 进阶:手动挂载组件与 Diff 算法深度解析
javascript·vue.js·算法
lkbhua莱克瓦241 小时前
HTML与CSS核心概念详解
前端·笔记·html·javaweb