DEV Community

Discussion on: Generating Random Whole numbers in JavaScript in a specific range

Collapse
 
jonrandy profile image
Jon Randy 🎖️

About 40% faster:

const getRandomInt = (min, max)=>~~(Math.random()*(max-min+1)+min)
Enter fullscreen mode Exit fullscreen mode
Collapse
 
willaiem profile image
Damian Żygadło

This is soooo confusing. I have like zero idea, why this works, espencially the "~" operator.

When I do ~(-1), I got 0, but if I do ~~(-1), I got -1. emm.... what?

Collapse
 
codingjlu profile image
codingjlu

>> and | also work in flooring a number, but in negative values it rounds "down".

Thread Thread
 
jonrandy profile image
Jon Randy 🎖️

It isn't flooring in these cases - merely removing the decimal part.

Thread Thread
 
codingjlu profile image
codingjlu

Oh, I forgot to mention—it behaves just like Math.floor unless the value is negative.

Collapse
 
jonrandy profile image
Jon Randy 🎖️ • Edited

~ is the bitwise NOT operator, which will reverse all bits in the number - having converted it to a 32-bit signed integer first. Applying it twice resets the bits to their original state. It's a dirty trick to convert to an integer

w3schools.com/js/js_bitwise.asp

Collapse
 
neoprint3d profile image
Drew Ronsman

Never seen that way I will have to try and use it

Collapse
 
sh20raj profile image
Sh Raj

Thanks bro... 👍👍
I will add this code to this Article 👍👍

Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

It's faster because it doesn't work; at least not for numbers bigger than what fits in a 32-bit integer ;)

Collapse
 
jonrandy profile image
Jon Randy 🎖️

Poorly written spec ;)

Thread Thread
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

The spec is wrong 😝

Collapse
 
sh20raj profile image
Sh Raj

Can You Minify this Function also...

function getParameterByName( name ){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️ • Edited

No need, your browser already minified it for you and put it in a class called URLSearchParams 😝

Thread Thread
 
sh20raj profile image
Sh Raj

Ya bro it helped 💖