开发者问题收集

javascript 随机数?

2011-03-07
244

我有一个对象,看起来像

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)

3个回答

您可以使用 Math.random() 获取 0 到 1 之间的随机值。然后,您可以使用 Math.ceil()Math.floor() 进行乘法运算以获取所需的值范围。

nss
2011-03-07

对于这个问题,您需要了解 JavaScript 的两个部分:

  1. Math.random() ,这是在 JavaScript 中生成随机数的唯一方法。它会生成一个介于 0 和 1 之间的数字;您可以使用 Math.floor(Math.random() * n) 获取一个介于 0n - 1 之间的随机整数。
  2. 正则表达式,用于从掩码中获取“模板”字符串,并执行替换。表达式 mask.match(/{.}/)[0] 将为您提供掩码中的第一个模板字符串(例如,在给定情况下为 '{m}' )。

要将 mask 中的 '{m}' 替换为 'foo' ,您可以编写

mask = mask.replace(/{m}/, 'foo');

将上述所有概念放在 while (mask.match(/{.}/) 循环中,就大功告成了!

Trevor Burnham
2011-03-07

首先,您必须匹配括号内的字符,您可以使用正则表达式来执行此操作:

/\{(\w)\}/g

另请注意,您的模板具有 {r 标签,该标签在对象中不存在。让我们自己填充它:

names.r = names.m.concat(names.f);

这里, names.r 中的元素是来自 names.mnames.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)];
    }));
}
Thai
2011-03-07