javascript - 用js编写一个函数,从一个任意字符串中提取所有的数字,然后将它们添加在一起
黄舟
黄舟 2017-04-11 13:23:59
[JavaScript讨论组]

注意不能用正则表达式. 使用的知识点只能是js的语法范围.

先谢过了

例如:

Input:  “We have 30 apples will be handed out to 10 students who need it, containing 5 foreigners ”.
Output: 30 + 10 + 5 = 45
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(6)
PHPz
var str='We have 30 apples will be handed out to 10 students who need it, containing 5 foreigners';

var sum = eval(str.match(/\d+/g).join('+'));

console.log(sum); // => 45

// 不用正则

var sumNoPattern = eval(str.split(' ').filter(function(item){
return item-0===+item
}).join('+'));

console.log(sumNoPattern); // => 45
阿神

typeof arr[i] === number

PHP中文网

把字符串挨着扫描一遍不就完了……

function char2num(str){
    let num = [],
        ans = 0,
        index = -1;
    for(let i = 0; i < str.length + 1; i++) {
        const now = parseInt(str[i]);
        if(i < str.length && str[i] ==='.' || now !== NaN && now < 10 && now > -1) {
            if(index === -1) {
                index = i;
            }
        } else if(index !== -1) {
            num.push(parseFloat(str.substring(index, i)));
            ans += num[num.length - 1];
            index = -1;
        }
    }
    return(num.join(" + ") + " = " + ans);
}
大家讲道理

var str = 'We have 30 apples will be handed out to 10 students who need it, containing 5 foreigners';

        var arr = [],sum = 0;
        arr = str.split(' ');
        for(var i = 0; i < arr.length; i++){
            if(!isNaN(parseInt(arr[i]))){
                sum += parseInt(arr[i]);
            }
        }
        console.log(sum);
PHP中文网
//需要处理的字符串
var str = 'We have 30 apples will be handed out to 10 students who need it, containing 5 foreigners';
//处理函数
var onlyNumpluse = function(strArg){
    //用空格将字符串截成数组
    var strArr = strArg.split(' '),
        sum = 0;
    //循环判断非NaN的value相加
    for(var i=0,len=strArr.length;i<len;i++){
        if(!isNaN(parseInt(strArr[i]))){
            sum += parseInt(strArr[i]);
        }
    }
    //返回结果
    return sum;
}
//调用
onlyNumpluse(str)
大家讲道理
//要求:从一串随机字符串中提取数字并相加
//要求:数字必须是连续数字,如ab30cd,必须提取30
//TODO:此方法未处理小数,如ab0.23cd,会提取23
function str2num(oldStr) {
   if (oldStr == '') {
      console.log('string is required');
   } else {

      //先去掉字符串的空格,再在首位分别加上‘aaa’和‘bbb’;
      //首尾加上非数字字符串是为了防止原字符串首尾是数字而导致的提取错误;
      var str = 'aaa' + oldStr.replace(/ /g,'') + 'bbb';

      var notNumIndexArr = [];//非数字字符的序号组成的数组
      var newArrFromStr = [];//由数字组成的数组
      var ArrForSum;//剔除newArrFromAtr中的空字符串后的纯数字数组
      var sum = 0;//输出的总和

      //提取非数字字符串的序号
      for (let i = 0; i < str.length; i++) {
         if (isNaN(str.charAt(i))) {
            notNumIndexArr.push(i);
         }
      }

      //最重要的一步
      //提取非数字字符串的序号中间的数字
      for (let i = 0; i < notNumIndexArr.length; i++) {
         newArrFromStr.push((str.substring(notNumIndexArr[i], notNumIndexArr[i + 1])).substring(1));//首字符是字母,需要从第二个字符提取
      }


      //console.log(notNumIndexArr);
      //console.log(newArrFromStr);

      //剔除数组中的空字符串
      ArrForSum = newArrFromStr.filter(function (val) {
         return val !== '';
      });

      //不需要剔除前几位是0的数字,如提取出来是003,相加时会当成3相加

      //求和
      for (let i = 0; i < ArrForSum.length; i++) {
         sum += parseInt(ArrForSum[i]);
      }

      return sum;
   }
}

var str = 'We have 30 apples will be handed out to 10 students who need it, containing 5 foreigners';
console.log(str2num(str));
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号