字符串中找最大值-一个面试题引发的一个文章

题目:写一个函数,输入一段合法的字符数组(n<1024),请用JavaScript从字符数组中找出最大的数值,比如(asc23423v234),得到的最大数值是23423。注意:数值为常用数值表达方式。(建议不要用正则,基本是死路)
部分测试用例:
1)输入asc23423v234,输出23423
2)输入pppp12bbbbbb12.31cccc,输出31
3)输入54.4..6Ⅲ-44.4+++5-4,输出54.4

解题:

      function calcMaxNumber(str) {
        //转成数组
        let arr = str.split('');
        // 控制断字
        let bool = false;
        // 选取数字和.的正则
        let regexp = /[\d|.]/i;
        let filterArr = [];
        //把连续数字和带点的连续数字抽取成新的数组
        arr.reduce((resStr, value, index, arr) => {
          if (regexp.test(value)) {
            bool = true;
            if (index === arr.length - 1) {
              let str = resStr + value;
              return filterArr.push(str);
            }
            return resStr + value;
          } else {
            if (bool) {
              filterArr.push(resStr);
            }
            bool = false;
            return '';
          }
        }, '');
        // 对过滤的数组中带有.的项进行拆分
        filterArr = filterArr.map(num => {
          if (num.includes('.')) {
            return handlePointStr(num);
          } else {
            return num;
          }
        });
        //对有.的字符串 进行处理 例如‘21.23.34’ 返回 [21.23,23.34,34]
        function handlePointStr(str) {
          let arr = str.split('.');
          if (arr[arr.length - 1] == '') {
            arr.splice(arr.length - 1);
          }
          let newArr = [];
          for (i = 0; i < arr.length - 1; i++) {
            newArr.push(arr[i] + '.' + arr[i + 1]);
          }
          newArr.push(arr[arr.length - 1]);
          return newArr;
        }
        // 二维数组进行扁平化
        filterArr = filterArr.toString().split(',');
        return Math.max(...filterArr);
        console.table(filterArr);
      }
     let max = calcMaxNumber('54..4..6II44.4+++5-4');
     console.log(max);

 

字符串中找最大值-一个面试题引发的一个文章》有3个想法

    1. 你好,题目测试用例是满足的,但是我在console的数据是54..4..6II44.4+++5-4,多加了一个点,截取最大的数据便是54了

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据