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


题目:写一个函数,输入一段合法的字符数组(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);

发表评论

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