probability in javascript help?

后端 未结 6 1852
-上瘾入骨i
-上瘾入骨i 2020-12-28 10:06

Sorry, I\'m new to JS and can\'t seem to figure this out: how would I do probability?

I have absolutely no idea, but I\'d like to do something: out of 100% chance, m

6条回答
  •  失恋的感觉
    2020-12-28 10:47

    For instance we define a number of functions

    function a () { return 0; }
    function b () { return 1; }
    function c () { return 2; }
    
    var probas = [ 20, 70, 10 ]; // 20%, 70% and 10%
    var funcs = [ a, b, c ]; // the functions array
    

    That generic function works for any number of functions, it executes it and return the result:

    function randexec()
    {
      var ar = [];
      var i,sum = 0;
    
    
      // that following initialization loop could be done only once above that
      // randexec() function, we let it here for clarity
    
      for (i=0 ; i=ar[i] ; i++) ;
    
      // Finally execute the function and return its result
    
      return (funcs[i])();
    }
    

    For instance, let's try with our 3 functions, 100000 tries:

    var count = [ 0, 0, 0 ];
    
    for (var i=0 ; i<100000 ; i++)
    {
      count[randexec()]++;
    }
    
    var s = '';
    var f = [ "a", "b", "c" ];
    
    for (var i=0 ; i<3 ; i++)
      s += (s ? ', ':'') + f[i] + ' = ' + count[i];
    
    alert(s);
    

    The result on my Firefox

    a = 20039, b = 70055, c = 9906
    

    So a run about 20%, b ~ 70% and c ~ 10%.


    Edit following comments.

    If your browser has a cough with return (funcs[i])();, just replace the funcs array

    var funcs = [ a, b, c ]; // the old functions array
    

    with this new one (strings)

    var funcs = [ "a", "b", "c" ]; // the new functions array
    

    then replace the final line of the function randexec()

    return (funcs[i])(); // old
    

    with that new one

    return eval(funcs[i]+'()');
    

提交回复
热议问题