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

如何实现接口返回颜色数据的唯一展示及未来新增颜色适配

嘿,我来帮你解决这个颜色重复显示的问题!

首先咱们得搞清楚问题根源:你现在的代码只是把每个对象里的colors内容直接渲染出来,而接口故意返回了重复的颜色条目,所以才会出现重复输出的情况。咱们的核心需求就是把重复的颜色条目过滤掉,只保留唯一值,同时还要兼容未来新增的颜色——用Set就能完美搞定这个需求,因为它天生就会自动忽略重复值,不管以后加什么新颜色都能适配。

分情况处理(看你的colors是字符串还是数组)

情况1:data[item].colors是字符串(比如你console.log输出的那种格式:(3) Blue (12) Green...)

注意到你的颜色里有像Red Purple这种多词的,直接按空格分割会把它拆成两个部分,所以得用正则来精准分割每个完整的颜色条目:

<>
  {Object.keys(data).map((item, index) => {
    // 用正则分割,确保多词颜色不会被拆分
    const colorEntries = data[item].colors.split(/(?<=\))\s+(?=\()/);
    // 用Set去重,再转回数组
    const uniqueColorEntries = [...new Set(colorEntries)];
    // 拼接回原来的字符串格式
    return (
      <tr key={data[item].id || index}> {/* 优先用唯一id当key,没有再用index */}
        <td>{uniqueColorEntries.join(' ')}</td>
      </tr>
    );
  })}
</>

情况2:data[item].colors本身就是数组(比如["(3) Blue", "(12) Green", ...])

这种情况更简单,直接用Set去重就行:

<>
  {Object.keys(data).map((item, index) => {
    const uniqueColors = [...new Set(data[item].colors)];
    return (
      <tr key={data[item].id || index}>
        <td>{uniqueColors.join(' ')}</td>
      </tr>
    );
  })}
</>

为什么这个方法能适配未来新增颜色?

因为Set不关心具体是什么值,只要是重复的就会自动过滤掉——不管以后接口新增什么颜色(比如(7) Yellow),只要它重复出现,Set都会帮你只保留一次,完全不用修改现有代码。

另外提个小建议:尽量别用index作为key,如果你的每个对象里有唯一标识(比如id),用它当key会让React的渲染更高效哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:57:47