javascript 随机数?
我有一个对象,看起来像
names = {
m: [
'adam',
'luke',
'mark',
'john'
],
f: [
'lucy',
'mary',
'jill',
'racheal'
],
l: [
'smith',
'hancock',
'williams',
'browne'
]
};
我想要做的是。
我得到一个字符串,看起来像
{m} {l} is a male name, so {f} {l} is a female name, {r} {l} must me a either/or(random) gender name
并且我希望它从正确的键中随机填充。
所以你可能会得到
luke browne is a male name, so racheal smith is a female name, mary browne must be a either/or(random) gender name
我该怎么做呢?
函数骨架看起来像
函数名称(掩码,回调){
代码的最后一行看起来像
callback(replaced)
您可以使用
Math.random()
获取 0 到 1 之间的随机值。然后,您可以使用
Math.ceil()
或
Math.floor()
进行乘法运算以获取所需的值范围。
对于这个问题,您需要了解 JavaScript 的两个部分:
-
Math.random()
,这是在 JavaScript 中生成随机数的唯一方法。它会生成一个介于 0 和 1 之间的数字;您可以使用Math.floor(Math.random() * n)
获取一个介于0
和n - 1
之间的随机整数。 -
正则表达式,用于从掩码中获取“模板”字符串,并执行替换。表达式
mask.match(/{.}/)[0]
将为您提供掩码中的第一个模板字符串(例如,在给定情况下为'{m}'
)。
要将
mask
中的
'{m}'
替换为
'foo'
,您可以编写
mask = mask.replace(/{m}/, 'foo');
将上述所有概念放在
while (mask.match(/{.}/)
循环中,就大功告成了!
首先,您必须匹配括号内的字符,您可以使用正则表达式来执行此操作:
/\{(\w)\}/g
另请注意,您的模板具有
{r
标签,该标签在对象中不存在。让我们自己填充它:
names.r = names.m.concat(names.f);
这里,
names.r
中的元素是来自
names.m
和
names.f
的名称。然后您可以使用
string.replace
来替换它们。
您可以提供一个可动态计算替换字符串的函数,而不是提供要替换的子字符串。
function replaceNames(mask, callback) {
callback(mask.replace(/\{(\w)\}/g, function(all, category) {
var arr = names[category];
return arr[Math.floor(Math.random() * arr.length)];
}));
}