2012-12-20 74 views
2

我想制作一个客户端A/B测试库。从JavaScript中生成随机数字字符串

每个用户都有一个存储在cookie中的随机数。每个测试都有一个测试名称和一组选项。我需要一个函数,根据用户的随机数,测试名称和选项,选择一个随机选项。当然,对于给定的一组输入,函数必须始终返回相同的选项。

如何在JavaScript中编写此函数?

回答

4

我目前的解决方案采用了CryptoJS library's MD5散列函数产生一个随机数:

// seed is the user's random number 

choose_option = function(seed, test_name, options) { 
    word = CryptoJS.MD5("" + seed + test_name).words[0]; // take first 32-bit word 
    i = Math.abs(word % options.length); 
    return options[i]; 
} 
+0

根据你的要求,这听起来很完美 - 你对这种技术有什么特别的反对意见吗?或者你只是好奇是否还有其他东西? – Bubbles

+0

@ Bubbles我希望有更简单的东西,它不需要依赖外部库。我也担心我在测试之间引入了一些统计偏差或依赖性。 –

+0

也可以在特定范围内生成数字。看到这里:http://stackoverflow.com/questions/15034013/generate-a-number-in-a-specific-range-from-a-checksum –

0
var availNum= [1, 4, 5, 6, 7, 8, 12]; 
//@var count number of random num you want 
function createRandomData(count) { 
    var data = [], 
    for (var i = 0; i < count; i++) { 
     var random = availNum[Math.floor(Math.random() * availNum.length)], 

     data.push({ 
      random:random 
     }); 
    } 
    return data; 
} 
+0

为什么你使用字符串的数字? – Brad

+0

抱歉,我已更改@Brad –

1

也许晚了一点,有点exagerate所讨论的lib中有很多功能,你可以不使用,但是我总是将这些包含在我的项目中,所以让我将我的解决方案暴露给你所遇到的同样的问题。

const Chance = require('chance'); 
c1 = Chance('[email protected]', 'maybe a uuid here'); 
c1.integer(); 
c1.natural({min:1000,max:9999}); 

c2 = Chance('foo-baz-bar'); 
c2.string(); 
c2.word(); 
... 

希望这有助于:这LIB可以用种子(chancejs#seed),用于创建可重复的结果是非常有用的来initalized。