padstart方法_PADS 2.4打开PCB显示已停止工作

之前两天搞得头皮发麻,有个需求是写个版本比较的方法,比如  ‘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 sortitem1, item2)
  }
}

const compareVersion = val1, val2) => {
  if !val1) {
    return false
  }
  val1 = val1.split'.').mapitem=>Numberitem))
  val2 = val2.split'.').mapitem=>Numberitem))
  return sortval1, val2)
}

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

const compareVersion = v1, v2) => {
         if !v1) {
             return false
         }
         v1 = v1.split'.').mapitem => item.padStart3, 0))
         v2 = v2.split'.').mapitem => item.padStart3, 0))
         return Numberv1.join'')) >= Numberv2.join''))
     }

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

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

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

padstart方法_PADS 2.4打开PCB显示已停止工作padstart方法_PADS 2.4打开PCB显示已停止工作

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

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

const compareVersion = v1, v2) => {
	return transArrayv1) >= transArrayv2)
}
const transArray = arr) => {
	return Numberarr.split'.').mapitem => {
		let length = item.length;
		forlet i = 0; i < 3 - length; i++) {
			item = '0' + item;
		}
		return item
	}).join''));
}

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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