Skip to content

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
}

参数

参数名类型必填说明
colorsColorReference[]颜色引用数组
standardizeColor(color: string) => string是(仅 deduplicateColorsByStandardizedValue颜色标准化函数,用于将不同格式的相同颜色统一

返回值

类型说明
ColorReference[]去重后的颜色引用数组,保留每个唯一颜色的第一次出现

工作原理

1. deduplicateColors(按位置去重)

  1. 创建 Map 存储唯一键值
  2. 对每个颜色生成唯一键:${file}:${line}:${normalizedValue}
  3. normalizedValue 为去除空格并转小写的颜色值
  4. 只保留第一次出现的颜色
  5. 返回去重后的数组

适用场景:代码分析,保留不同位置的相同颜色

2. deduplicateColorsByValue(按值去重)

  1. 创建 Map 存储唯一键值
  2. 对每个颜色标准化值:去除空格、转小写
  3. 使用标准化值作为唯一键
  4. 只保留第一次出现的颜色值
  5. 返回去重后的数组

适用场景:生成调色板,#ff0000 和 #FF0000 被视为相同

3. deduplicateColorsByStandardizedValue(智能去重)

  1. 创建 Map 存储唯一键值
  2. 对每个颜色调用 standardizeColor 函数转换为统一格式
  3. 使用标准化后的值作为唯一键
  4. 只保留第一次出现的颜色
  5. 返回去重后的数组(保留原始格式)

适用场景:识别相同颜色的不同表示(#ff0000, rgb(255,0,0), red, hsl(0,100%,50%) 被视为相同)

通常配合 convertColor 使用:

typescript
deduplicateColorsByStandardizedValue(
  colors,
  (color) => convertColor(color, 'hex') || color
)