递归地找到数字的总和,包括RegEx和没有Eval()

时间:2015-09-15 05:42:06

标签: javascript regex recursion

任何人都可以建议一个避免eval的实现,希望使用正则表达式,并在6行或更少的行中执行?这是一个有趣的问题。

输入:12 => 3 输入:235 => 10 => 1

function baseNumber(n){
   var x =  eval(n.toString().replace(/(\d)(?=\d)/g, '$1+'))
   if(x>9){
     return baseNumber(x)
   } else {
     return x
   }
}

3 个答案:

答案 0 :(得分:2)

如果你需要使用正则表达式(你也可以在没有正则表达式和使用拆分的情况下做同样的事情)

function baseNumber(n){
   if (n > 9)
      return baseNumber(n.toString().match(/(\d)/g).reduce(function(a, b) { return a + Number(b) }, 0))
   else
      return n;
}

减少总结了。匹配返回匹配数组(即数字)

如果您要处理小数和负数,请将if (n > 9)支票更改为if (n.toString().length > 1)

答案 1 :(得分:0)

尝试使用nStringString.prototype.split()String.prototype.replace()Array.prototype.splice()循环播放Number()do.. while



function baseNumber(n) {     
  var x = String(n).replace(/[^\d]/g, "").split(""), y = 0;   
  do { y += Number(x.splice(0, 1)) } while (!!x.length);
  return y > 9 ? baseNumber(y) : y
}

console.log(baseNumber("abc12"), baseNumber("def235"))




答案 2 :(得分:0)

这个怎么样:

var input = 235;
while(input > 9) input  = String(input).match(/[\d]/g).reduce(function(sum, currentValue) { 
    return sum + parseInt(currentValue);
}, 0);
console.log(input);