关于padStart的问题

关于padStart的问题之前两天搞得头皮发麻 有个需求是写个版本比较的方法 比如 10 5 4 版本是否大于 9 52 1 版本 正常的思路是使用 split 去截取几段 然后做递归比较 如下 版本对比 constsort item1 item2 gt if item1 0 gt item2 0 returntrue elseif item1

之前两天搞得头皮发麻,有个需求是写个版本比较的方法,比如  ‘10.5.4’ 版本是否大于’9.52.1′ 版本 。正常的思路是使用split去截取几段,然后做递归比较。如下:

//版本对比 const sort = (item1, item2) => { if (item1[0] > item2[0]) { return true } else if (item1[0] < item2[0]) { return false } else { if (item1.length === 0) { return true } item1.shift() item2.shift() return sort(item1, item2) } } const compareVersion = (val1, val2) => { if (!val1) { return false } val1 = val1.split('.').map(item=>Number(item)) val2 = val2.split('.').map(item=>Number(item)) return sort(val1, val2) }

这样显然会比较麻烦,如果使用 padStart方法转换下思路的话,就会变得很简单。

const compareVersion = (v1, v2) => { if (!v1) { return false } v1 = v1.split('.').map(item => item.padStart(3, 0)) v2 = v2.split('.').map(item => item.padStart(3, 0)) return Number(v1.join('')) >= Number(v2.join('')) }

但是再使用这个方法的过程中,却出现了天坑。

之前自己在本地的chrome环境里测试是全完没有问题的,然后在测试环境也完全没有问题,但是一发生产环境就报错了。期间各种排查原因,无法解释一套代码为何会出现不同结果。

最后使用了第一种方法解决了这个问题,稍后又查了文档

关于padStart的问题

padStart是属于es2017的方法也就是俗称的es8,版本过高,确实可能会产生不兼容的问题。至于为什么测试环境没问题,猜测可能是测试环境与正式环境并非一样版本,比如可能babel编译版本不同造成的。

所以以后写代码的时候也不能过于追求简洁,当然在后面又将padStart方法的实现进行了下重写,也可以解决这个问题。

const compareVersion = (v1, v2) => { return transArray(v1) >= transArray(v2) } const transArray = (arr) => { return Number(arr.split('.').map(item => { let length = item.length; for(let i = 0; i < 3 - length; i++) { item = '0' + item; } return item }).join('')); }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219711.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:04
下一篇 2026年3月17日 下午10:04


相关推荐

  • html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight…

    html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight…浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight发布时间:2020-07-1709:27:20来源:亿速云阅读:223作者:小猪小编这次要给大家分享的是浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这…

    2022年7月23日
    15
  • python运算符优先级_excel运算符优先级最高的

    python运算符优先级_excel运算符优先级最高的在Python中,支持以下类型的运算符:算术运算符 比较(关系)运算符 逻辑(布尔)运算符 位运算符 赋值运算符 成员运算符 身份运算符1.算术运算符运算符 含义 示例 + 加:两个对象相加,或者一元加 x+y – 减:两个对象相减,或得到负数 x-y * 乘:两个操作数相乘,或是返回一个被重复若干次的字符串…

    2025年8月6日
    4
  • extjs_03_grid(添加数据)

    extjs_03_grid(添加数据)

    2022年1月8日
    62
  • js操作DropDownList大全

    js操作DropDownList大全一:js设置DropDownList选中某项 1.根据Value值设置选中某项   例子如下: HTML代码: 选项0选项1  JS代码:document.getElementById(“ddlFolder”).value=”0″;//0为你要选中的项的value  2.根据Text值设置选中某项

    2022年10月16日
    5
  • 地图行政区域标注

    地图行政区域标注引用别人的博客 http blog csdn net 27561265 article details 51721116http www cnblogs com milkmap p 3766153 htmlhttp www mamicode com info detail 1215824 html 主要实现函数 nbsp nbsp nbsp nbsp

    2026年3月16日
    3
  • KAZE FEATURES「建议收藏」

    KAZE FEATURES「建议收藏」KAZE系列笔记:1.  OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波2.  OpenCV学习笔记(28)KAZE 算法原理与源码分析(二)非线性尺度空间构建3.  OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述4.  OpenCV学习笔记(30)KAZE 算法原理与源码分析(四)KAZE特征的性能分析与比较5.  

    2022年6月28日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号