用js编写一个函数,从一个任意字符串中提取所有的数字,然后将它们添加在一起

发布于 2022-09-04 00:49:36 字数 212 浏览 21 评论 0

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

先谢过了

例如:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

倒带 2022-09-11 00:49:36
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
橘和柠 2022-09-11 00:49:36

typeof arr[i] === number

怎会甘心 2022-09-11 00:49:36

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

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);
}
梦幻的味道 2022-09-11 00:49:36

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);
九八野马 2022-09-11 00:49:36
//需要处理的字符串
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)
少女七分熟 2022-09-11 00:49:36
//要求:从一串随机字符串中提取数字并相加
//要求:数字必须是连续数字,如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));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文