JavaScript颜色转换

最近在刷scriptOJ上面的题目

遇到了将16进制颜色转换成rgb格式的题目特此记录一下:

const hexToRGB = hex => {
  hex=hex+"";
  hex = hex[0] === '#' ? hex.slice(1) : hex
  hex = hex.length === 3 ?(hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]) : hex
  console.log(hex);
  let res="";
  if ((hex.length !== 6) || !(/^[0-9a-fA-F]{6}$/.test(hex))) return null
   res=parseInt(hex[0]+hex[1],16)+", "+parseInt(hex[2]+hex[3],16)+", "+parseInt(hex[4]+hex[5],16);
  return `rgb(${res})`
}
console.log(hexToRGB('#7aE'));

输出结果:

注意点:

  • 在做这种在线运行的题目时,往往测试用例比较多,所以要把所有情况考虑全,采坑如下
  1. 输入的hex可能不是一个字符串,所以要把它转换成字符串。尝试过不转换下面报错没法读取0,不懂为什么
  2. 要检查hex的长度是不是6,有可能输入#ffaaffa,正则检查是不是符合/^[0-9a-fA-F]{6}$/,因为有可能是#script
  3. 逗号后有空格,这点仔细检查一下就发现了,不过我有次笔试的时候也踩过坑,一般答案样子差不多基本上就是逗号是不是英文格式以及空格问题。
  4. 搜答案的时候看到一个人写str.repeat(2)这是es6新增的字符串方法,但是其实如果str是abc返回的是abcabc不是我们想要的aabbcc
  • parseInt的第二个参数,今天是第一次用:注意如果第二个参数不写,默认是按十进制转换,通常情况下参数二的范围是:介于 2 ~ 36 之间。

下面贴上反转换的方式:

		const RGBTohex=rgb=>{
			rgb=rgb.slice(4,-1);
			let rgb0=[];
			let fir=rgb.indexOf(",");
			let sec=rgb.lastIndexOf(",");
			rgb0.push(parseInt(rgb.slice(0,fir)),parseInt(rgb.slice(fir+1,sec)),parseInt(rgb.slice(sec+1)));
			console.log(parseInt(rgb.slice(sec+1)));
			const [r,g,b]=rgb0;
			let res=r.toString(16)+","+g.toString(16)+","+b.toString(16);
			return `#${res}`
		}
		console.log(RGBTohex("rgb(119,170,238)"))

运行结果:

  • 恰好用到了数字转为16进制。结合上一程序中的字符串转十六进制数。两个(目前我)不常用的知识点。
  • 用到了es6解构赋值,比较简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值