前端 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 大。
相关推荐
默默学前端8 分钟前
ES6模板语法与字符串处理详解
前端·ecmascript·es6
lxh011316 分钟前
记忆函数 II 题解
前端·javascript
我不吃饼干23 分钟前
TypeScript 类型体操练习笔记(三)
前端·typescript
华仔啊26 分钟前
除了防抖和节流,还有哪些 JS 性能优化手段?
前端·javascript·vue.js
CHU72903534 分钟前
随时随地学新知——线上网课教学小程序前端功能详解
前端·小程序
清粥油条可乐炸鸡36 分钟前
motion入门教程
前端·css·react.js
这是个栗子39 分钟前
【Vue3项目】电商前台项目(四)
前端·vue.js·pinia·表单校验·面包屑导航
前端Hardy43 分钟前
Electrobun 正式登场:仅 12MB,JS 桌面开发迎来轻量化新方案!
前端·javascript·electron
树上有只程序猿43 分钟前
新世界的入场券,不再只发给程序员
前端·人工智能
confiself1 小时前
deer-flow前端分析
前端