Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

function will work with a fixed value but not with the variable that produces it

I have this function:

function rgbtohex(val) {
  var clean = val.replace(/[^0-9\.,]/g, "");
  var colors = clean.split(',');
  var r = colors[0];
  var g = colors[1];
  var b = colors[2];

  return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}

console.log(rgbtohex('rgb(64, 128, 128)')); //should output #408080, instead it outputs #1004288128

it’s supposed to convert rgb to hex, something like this:

rgbtohex('rgb(64, 128, 128)') //should output #408080, instead it outputs #1004288128

but it outputs a wrong value. After breaking it down I found out it will work with the given value if var b equals a fixed value (in this case 128) instead of a variable. Like this:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

 var r = colors[0];
 var g = colors[1];
 var b = 128;

why is that?

Fiddle here: https://jsfiddle.net/kr2bmaxp/2/

>Solution :

Your colors array is an array of strings, try converting it to numbers:

function rgbtohex(val) {
 var clean = val.replace(/[^0-9\.,]/g, "");
 var colors = clean.split(',').map(Number);
 var r = colors[0];
 var g = colors[1];
 var b = colors[2];
 
  return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
} 

console.log(rgbtohex('rgb(64, 128, 128)')) //should output #408080, instead it outputs #1004288128

Note that with destructuring syntax you can reduce the code a bit:

let [r, g, b] = clean.split(',').map(Number);
// delete the individual r, g, b assignments
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading