如何编写精简算法生成指定规则的马卡龙浅色系十六进制颜色数组?
实现思路
你提供的颜色数组本质是固定RGB分量的全排列,没有复杂的生成逻辑,无需用switch case实现:
- 红色(R)分量可选值:
ff、cc - 绿色(G)分量可选值:
aa、bb、cc、dd、ee、ff - 蓝色(B)分量可选值:
cc、dd、ee、ff
三者全排列总数量为 264=48,和你给出的数组长度完全匹配。
代码实现
基础生成版本(顺序可自由调整)
function generatePastelColors() { const R = ['ff', 'cc'] const G = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'] const B = ['cc', 'dd', 'ee', 'ff'] // 三层遍历拼接所有组合 return R.flatMap(r => G.flatMap(g => B.map(b => r + g + b) ) ) } const pastelColor = generatePastelColors()
完全匹配原数组顺序版本
如果需要和你给出的数组顺序完全一致,调整遍历顺序即可:
function generatePastelColorsMatchOriginal() { const R = ['ff', 'cc'] const G = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'] const BForRFF = ['cc', 'dd', 'ee', 'ff'] // R=ff时B从小到大 const BForRCC = ['ff', 'ee', 'dd', 'cc'] // R=cc时B从大到小 const result = [] // 处理R=ff的部分 BForRFF.forEach(b => { G.forEach(g => result.push('ff' + g + b)) }) // 处理R=cc的部分 BForRCC.forEach(b => { G.forEach(g => result.push('cc' + g + b)) }) return result }
以上生成的数组和你硬编码的数组完全一致,代码体积远小于硬编码和switch case方案。
内容的提问来源于stack exchange,提问作者Tenma
相关产品推荐
相关产品推荐

