任何人都可以建议一个避免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
}
}
答案 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)
尝试使用n
,String
,String.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);