Javascript RGB到十六进制转换-确保数字为0-255

Javascript RGB到十六进制转换-确保数字为0-255,javascript,hex,rgb,Javascript,Hex,Rgb,RGB到十六进制的转换。下面的代码将rgb转换为十六进制。有一个问题,r、g或b必须介于0和255之间。目前,如果它们低于0,我的代码不会将它们四舍五入到0。我不知道为什么?此外,我需要确保最大值为255。有什么建议吗 function rgb(r, g, b){ var newarr = []; newarr.push(r, g, b ); var b = newarr.map(function(x){ if (isNaN(x) === true ) { if

RGB到十六进制的转换。下面的代码将rgb转换为十六进制。有一个问题,r、g或b必须介于0和255之间。目前,如果它们低于0,我的代码不会将它们四舍五入到0。我不知道为什么?此外,我需要确保最大值为255。有什么建议吗

function rgb(r, g, b){
var newarr = [];
newarr.push(r, g, b );

var b = newarr.map(function(x){             
 if (isNaN(x) === true ) {
  if ( x  > 0 ) {
  parseInt(x).toString(16); 
  return  (x.length==1) ? "0"+x : x;  
  } else {
  x =  0 ;
  parseInt(x).toString(16); 
  return  (x.length==1) ? "0"+x : x; 
    }
    } else {
    parseInt(x).toString(16); 
  return  (x.length==1) ? "0"+x : x; 
  }

});


var tos = String(b) ;
var fin = tos.replace(/,/g," ");
fint = fin.replace(/\s/g,'');
document.write(fint);
}

rgb('0','0','-14');

此示例当前返回:
0000-14

您的代码可能更简单:

function rgb(r, g, b){
    return [r, g, b].map(function(v) {
        return ('0' + 
            Math.min(Math.max(parseInt(v), 0), 255)
            .toString(16)
        ).slice(-2);
    }).join('');
}

您的代码可以简单得多:

function rgb(r, g, b){
    return [r, g, b].map(function(v) {
        return ('0' + 
            Math.min(Math.max(parseInt(v), 0), 255)
            .toString(16)
        ).slice(-2);
    }).join('');
}

谢谢,但是如果您的代码中输入了一位数字r、g、b,则您的代码不会添加额外的
0
。例如4,45,155。它必须在4之前加一个零,这样它就是04。十六进制代码必须是6个字符长。谢谢,代码现在是完美的。我想知道你能否解释一下为什么要用切片?我不明白为什么这里有必要?如果你愿意,我将不胜感激。谢谢你的帮助。@mattnewbie我不明白为什么这里需要它?它不做零填充。有关详细信息,请参阅。顺便说一句:如果这个答案能解决你的问题,你可以选择“接受”。谢谢,知道这个答案非常有用。谢谢,但是如果在r、g、b中输入了一位数字,你的代码不会添加额外的
0
。例如4,45,155。它必须在4之前加一个零,这样它就是04。十六进制代码必须是6个字符长。谢谢,代码现在是完美的。我想知道你能否解释一下为什么要用切片?我不明白为什么这里有必要?如果你愿意,我将不胜感激。谢谢你的帮助。@mattnewbie我不明白为什么这里需要它?它不做零填充。有关详细信息,请参阅。顺便说一句:如果这个答案能解决你的问题,你可以选择“接受”。谢谢你,知道这个答案很有用。