クライアント側のA/Bテストライブラリを作成したいと思います。
各ユーザーには、Cookieに格納された乱数があります。各テストには、テスト名と一連のオプションがあります。ユーザーの乱数、テスト名、およびオプションを指定して、ランダムなオプションを選択する関数が必要です。もちろん、関数は、指定された入力セットに対して常に同じオプションを返す必要があります。
この関数をJavaScriptで作成するにはどうすればよいですか?
クライアント側のA/Bテストライブラリを作成したいと思います。
各ユーザーには、Cookieに格納された乱数があります。各テストには、テスト名と一連のオプションがあります。ユーザーの乱数、テスト名、およびオプションを指定して、ランダムなオプションを選択する関数が必要です。もちろん、関数は、指定された入力セットに対して常に同じオプションを返す必要があります。
この関数をJavaScriptで作成するにはどうすればよいですか?
私の現在のソリューションでは、CryptoJSライブラリの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];
}
問題のライブラリには使用できない機能がたくさんあるので、少し遅れて少し誇張するかもしれませんが、私は常にこれをプロジェクトに含めているので、あなたが抱えていたのとまったく同じ問題に私のソリューションを公開させてください。このlibはシード(chancejs#seed)で初期化でき、繰り返し可能な結果を作成するのに非常に役立ちます。
const Chance = require('chance');
c1 = Chance('email@gmail.com', 'maybe a uuid here');
c1.integer();
c1.natural({min:1000,max:9999});
c2 = Chance('foo-baz-bar');
c2.string();
c2.word();
...
お役に立てれば。
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;
}