我希望能够以字符串形式获取一组数字的变量,例如将其称为str
,并在该字符串中的每隔一个空格中插入1到10之间的随机数。现在我有这个代码:
str.toString().match(/.{1}/g).join((Math.floor((Math.random() * 10)
+ 1)).toString())
这几乎可以做到,但它会生成一个随机数并每次都插入,而不是为每个其他空间生成新的随机数。例如,如果str = '1234567890'
,我希望它变成类似18293547596173889302
的东西,而是我得到像182838485868789808
这样的东西。任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
您展示的代码会计算(Math.floor((Math.random() * 10)
+ 1)).toString()
部分一次,并将结果传递给.join()
方法。
我会考虑使用字符串.replace()
方法,因为这样你就可以使用每次替换时调用一次的函数:
var str = '1234567890'
var output = str.replace(/./g, function(m) {
return m + Math.floor((Math.random() * 10) + 1)
})
console.log(output)
/./g
匹配每个字符,一次一个,匹配的字符将传递给回调函数,以便您可以在替换中使用它。
请注意+
连接运算符会自动将随机数转换为字符串,因此您无需自己调用.toString()
。
编辑:请注意,您的原始.join()
代码在现有数字之间插入新数字,因此在输入的最后一个字符后没有添加任何内容,但是您的示例输出在每个现有数字(包括最后一个数字)后添加了一个随机数我的代码执行后者。如果您不想在最后添加最后一个随机数字,可以通过在结果上调用.slice(0, -1)
来删除它。
答案 1 :(得分:1)
您可以使用这样的地图
var str = '1234567890';
var result = str.toString().split('').map(n => n + (Math.floor((Math.random() * 10)
+ 1))).join('');
console.log(result);