You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何精简根据颜色值查找对应键名的TypeScript代码?

TypeScript多语言颜色值查找代码精简方案

你的核心问题是重复调用getKeyByValue函数,冗余代码过多。可以通过以下方式大幅精简:

优化思路

  1. 统一管理目标颜色:将所有需要查找的德语、英语颜色值整理到一个数组中,避免重复编写相同的查找逻辑
  2. 简化循环结构:用更简洁的循环语法替代传统for循环,同时减少嵌套的判断分支
  3. 性能优化(可选):提前构建值到键的映射表,把多次线性查找转为单次哈希查找,提升效率

精简代码示例

基础精简版(保持原有查找逻辑)

const getKeyByValue = (obj: _Variant, value: string) => 
  Object.keys(obj).find(key => obj[key] === value.toLowerCase());

// 统一管理所有要查找的颜色(德语+英语)
const targetColors = [
  "schwarz", "black", "weiß", "white", "rot", "red",
  "gelb", "yellow", "grün", "green", "blau", "blue",
  "lila", "purple", "beige", "pink", "camouflage", 
  "gold", "silber", "silver"
];

let k = null;

// 遍历每个variant,逐个匹配颜色
for (const variant of variants) {
  // 遍历颜色数组,找到第一个匹配的键
  k = targetColors.find(color => getKeyByValue(variant, color));
  if (k) {
    // 找到匹配后立即跳出循环
    break;
  }
}

性能优化版(适合数据量较大的场景)

如果variants数量多或每个variant的键值对较多,建议提前构建值到键的映射,减少重复查找:

// 统一管理目标颜色并转成小写,避免重复转换
const targetColors = [
  "schwarz", "black", "weiß", "white", "rot", "red",
  "gelb", "yellow", "grün", "green", "blau", "blue",
  "lila", "purple", "beige", "pink", "camouflage", 
  "gold", "silber", "silver"
].map(color => color.toLowerCase());

let k = null;

// 使用标签循环快速跳出多层循环
outerLoop: for (const variant of variants) {
  // 构建当前variant的“小写值→键”映射表
  const valueToKeyMap = Object.fromEntries(
    Object.entries(variant).map(([key, value]) => [value.toLowerCase(), key])
  );
  
  // 遍历目标颜色,直接从映射表取结果
  for (const color of targetColors) {
    if (valueToKeyMap[color]) {
      k = valueToKeyMap[color];
      break outerLoop;
    }
  }
}

优化说明

  • 两种方案都彻底消除了重复的getKeyByValue调用和if-break分支,代码结构更清晰
  • 基础版保留了你原有的查找逻辑,改动最小
  • 性能优化版通过哈希映射将每次查找的时间复杂度从O(n)降为O(1),在数据量大时优势明显

内容的提问来源于stack exchange,提问作者managerit017

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:19:58