True or better Random numbers with Javascript

前端 未结 8 684
花落未央
花落未央 2020-11-28 08:41

I have all kinds of resources that rely on javascript random numbers. However, I\'ve been seeing a lot of problems where random isn\'t so random because of the way I\'m gene

8条回答
  •  抹茶落季
    2020-11-28 09:18

    Rando.js is cryptographically secure. It's basically window.crypto.getRandomValues() that uses window.msCrypto.getRandomValues() as a failsafe and Math.random() as a last resort failsafe, but it's easier to implement and use. Here's a basic cryptographically secure random [0, 1) number:

    console.log(rando());

    Nice and easy. If that's all you wanted, you're good to go. If you want it to do more for you, it's also capable of all this:

    console.log(rando(5));                      //an integer between 0 and 5 (could be 0 or 5));  
    console.log(rando(5, 10));                  //a random integer between 5 and 10 (could be 5 or 10));  
    console.log(rando(5, "float"));             //a floating-point number between 0 and 5 (could be exactly 0, but never exactly 5));  
    console.log(rando(5, 10, "float"));         //a floating-point number between 5 and 10 (could be exactly 5, but never exactly 10));  
    console.log(rando(true, false));            //either true or false  
    console.log(rando(["a", "b"]));             //{index:..., value:...} object representing a value of the provided array OR false if array is empty  
    console.log(rando({a: 1, b: 2}));           //{key:..., value:...} object representing a property of the provided object OR false if object has no properties  
    console.log(rando("Gee willikers!"));       //a character from the provided string OR false if the string is empty. Reoccurring characters will naturally form a more likely return value  
    console.log(rando(null));                   //ANY invalid arguments return false  
    
    //Prevent repetitions by grabbing a sequence and looping through it
    console.log(randoSequence(5));              //an array of integers from 0 through 5 in random order  
    console.log(randoSequence(5, 10));          //an array of integers from 5 through 10 in random order  
    console.log(randoSequence(["a", "b"]));     //an array of {index:..., value:...} objects representing the values of the provided array in random order  
    console.log(randoSequence({a: 1, b: 2}));   //an array of {key:..., value:...} objects representing the properties of the provided object in random order  
    console.log(randoSequence("Good gravy!"));  //an array of the characters of the provided string in random order  
    console.log(randoSequence(null));           //ANY invalid arguments return false

    It supports working with jQuery elements too, but I left that out of this demo so I wouldn't have to source in jQuery. If you need that, just check it out on the GitHub or website.

提交回复
热议问题