2012-12-20 2 views
2

클라이언트 측 A/B 테스트 라이브러리를 만들고 싶습니다.JavaScript에서 문자열의 난수 생성

각 사용자는 쿠키에 저장된 임의 번호를가집니다. 각 테스트에는 테스트 이름과 옵션 배열이 있습니다. 사용자의 난수, 테스트 이름 및 옵션이 지정된 임의의 옵션을 선택하는 함수가 필요합니다. 물론 함수는 주어진 입력 집합에 대해 항상 동일한 옵션을 반환해야합니다.

어떻게이 기능을 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

문제의 lib 디렉토리와 같은 비트 exagerate 사용하지 수있는 많은 기능이 있습니다를하지만, 저는 항상 이것을 내 프로젝트에 포함 시키므로 저의 해결책을 당신이 가진 바로 그 문제에 드러내도록하겠습니다. 이 도움이

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 할 수 있습니다.