系列文章
- [ CodeWar ] - 001:过滤重复字符
- [ CodeWar ] - 002:最大和最小值
- [ CodeWar ] - 003:判断质数
- [ CodeWar ] - 004:处理数组元素
- [ CodeWar ] - 005:用户分组
- [ CodeWar ] - 006:数组比对
- [ CodeWar ] - 007:找不同
- [ CodeWar ] - 008:分割字符串
- [ CodeWar ] - 009:哈希标签生成器
- [ CodeWar ] - 010:大数相加
- [ CodeWar ] - 011:最短路径
题目

需求:
- 将输入的三个数字转化成十六进制的格式
解析
相比于之前的几道题,这道题相对简单很多,思路如下:
- 判断数字是否处于
0~255之间,超出则取边界 - 将数字转为十六进制格式,如果长度小于 2 则补 0
const rgb = (r, g, b) =>
[r, g, b]
.map((dec) => Math.max(0, Math.min(255, dec)))
.map((dec) => (dec.toString(16).length < 2 ? `0${dec.toString(16).toUpperCase()}` : dec.toString(16).toUpperCase()))
.join('')
优化
上述代码虽然看起来比较简洁,但实际上需要遍历两次,那么这里换一个思路,对齐进行优化:
- 有的数转十六进制需要补 0,有的不需要
- 那么自然可以将所有数都补 0,然后截取最后两位
- 这样需要补 0 的数可以截取到 0 和本身
- 不需要补的则只截取到本身
const rgb = (r, g, b) =>
[r, g, b]
.map((dec) => `0${Math.max(0, Math.min(255, dec)).toString(16)}`.slice(-2))
.join('')
.toUpperCase()