deduplicateColors
对颜色引用数组进行去重,支持多种去重策略。
函数签名
typescript
// 按位置去重(文件路径 + 行号 + 颜色值)
function deduplicateColors(colors: ColorReference[]): ColorReference[]
// 按值去重(忽略大小写)
function deduplicateColorsByValue(colors: ColorReference[]): ColorReference[]
// 按标准化值去重(识别不同格式的相同颜色)
function deduplicateColorsByStandardizedValue(
colors: ColorReference[],
standardizeColor: (color: string) => string
): ColorReference[]
interface ColorReference {
originalValue: string
format: ColorFormat
line: number
file: string
context: string
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
colors | ColorReference[] | 是 | 颜色引用数组 |
standardizeColor | (color: string) => string | 是(仅 deduplicateColorsByStandardizedValue) | 颜色标准化函数,用于将不同格式的相同颜色统一 |
返回值
| 类型 | 说明 |
|---|---|
ColorReference[] | 去重后的颜色引用数组,保留每个唯一颜色的第一次出现 |
工作原理
1. deduplicateColors(按位置去重)
- 创建 Map 存储唯一键值
- 对每个颜色生成唯一键:
${file}:${line}:${normalizedValue} - normalizedValue 为去除空格并转小写的颜色值
- 只保留第一次出现的颜色
- 返回去重后的数组
适用场景:代码分析,保留不同位置的相同颜色
2. deduplicateColorsByValue(按值去重)
- 创建 Map 存储唯一键值
- 对每个颜色标准化值:去除空格、转小写
- 使用标准化值作为唯一键
- 只保留第一次出现的颜色值
- 返回去重后的数组
适用场景:生成调色板,#ff0000 和 #FF0000 被视为相同
3. deduplicateColorsByStandardizedValue(智能去重)
- 创建 Map 存储唯一键值
- 对每个颜色调用
standardizeColor函数转换为统一格式 - 使用标准化后的值作为唯一键
- 只保留第一次出现的颜色
- 返回去重后的数组(保留原始格式)
适用场景:识别相同颜色的不同表示(#ff0000, rgb(255,0,0), red, hsl(0,100%,50%) 被视为相同)
通常配合 convertColor 使用:
typescript
deduplicateColorsByStandardizedValue(
colors,
(color) => convertColor(color, 'hex') || color
)