传送门

字符串遍历

  1. 图解

  2. 代码实现

    var strToInt = function (s) {
      let flag = 1; // 符号位默认为正数
      let inx = 0; // 字符索引
      let res = 0;
      let bndry = 214748364;
    
      // 去掉字符前面的空格
      while (s[inx] === ' ') {
        inx++;
      }
    
      // 获取符号位
      if (inx < s.length && s[inx] === '+') {
        inx++;
      } else if (inx < s.length && s[inx] === '-') {
        flag = -1;
        inx++;
      }
    
      while (inx < s.length && s[inx] <= '9' && s[inx] >= '0') {
        // 字符转数字: 此数字的 ASCII 码 与 0 的 ASCII 码相减即可
        let digit = s[inx++] - '0';
    
        if (res > bndry || res === bndry && digit > 7) return flag == 1 ? 2147483647 : -2147483648;
    
        res = res * 10 + digit;
      }
    
      return res * flag;
    };
    

正则

  1. 代码实现:

    var myAtoi = function (str) {
      //利用正则
      // [ '1213342232', index: 0, input: '1213342232', groups: undefined ]
      let result = str.trim().match(/^[-|+]{0,1}[0-9]+/)
    
      if (result != null) {
        if (result[0] > (Math.pow(2, 31) - 1)) {
          return Math.pow(2, 31) - 1
        }
        if (result[0] < Math.pow(-2, 31)) {
          return Math.pow(-2, 31)
        }
        return result[0]
      }
    
      return 0
    };
    

parseInt API

  1. 代码实现:

    var myAtoi = function (str) {
      const number = parseInt(str, 10);
    
      if (isNaN(number)) {
        return 0;
      } else if (number < Math.pow(-2, 31) || number > Math.pow(2, 31) - 1) {
        return number < Math.pow(-2, 31) ? Math.pow(-2, 31) : Math.pow(2, 31) - 1;
      } else {
        return number;
      }
    };
    
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 传送门
  2. 2. 字符串遍历
  3. 3. 正则
  4. 4. parseInt API