我想製作一個客戶端A/B測試庫。從JavaScript中生成隨機數字字符串
每個用戶都有一個存儲在cookie中的隨機數。每個測試都有一個測試名稱和一組選項。我需要一個函數,根據用戶的隨機數,測試名稱和選項,選擇一個隨機選項。當然,對於給定的一組輸入,函數必須始終返回相同的選項。
如何在JavaScript中編寫此函數?
我想製作一個客戶端A/B測試庫。從JavaScript中生成隨機數字字符串
每個用戶都有一個存儲在cookie中的隨機數。每個測試都有一個測試名稱和一組選項。我需要一個函數,根據用戶的隨機數,測試名稱和選項,選擇一個隨機選項。當然,對於給定的一組輸入,函數必須始終返回相同的選項。
如何在JavaScript中編寫此函數?
我目前的解決方案採用了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];
}
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;
}
爲什麼你使用字符串的數字? – Brad
抱歉,我已更改@Brad –
也許晚了一點,有點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。
根據你的要求,這聽起來很完美 - 你對這種技術有什麼特別的反對意見嗎?或者你只是好奇是否還有其他東西? – Bubbles
@ Bubbles我希望有更簡單的東西,它不需要依賴外部庫。我也擔心我在測試之間引入了一些統計偏差或依賴性。 –
也可以在特定範圍內生成數字。看到這裏:http://stackoverflow.com/questions/15034013/generate-a-number-in-a-specific-range-from-a-checksum –