【问题标题】:Better way to do this if statement执行此操作的更好方法 if 语句
【发布时间】:2017-08-16 13:53:10
【问题描述】:

我正在努力提高我的一些 JS 技能。

我有许多十六进制颜色,它们存储在作为前景色和背景色的对象中。

当网页的宽度为特定大小时,我想确保不使用对象中的某些特定颜色来更改文本颜色。

这是我目前所拥有的。这很好用......我知道我也可以使用开关,但其他人可以改进 if ||请发表声明?

 var colorThemes = [
        // Combo 1:
        { foreground: "#0A1C6B", background: "#5DF0AD" },
        // Combo 2:
        { foreground: "#C2F5FF", background: "#0A1C6B" },
        // Combo 3:
        { foreground: "#583985", background: "#CCCCF0" },
        // Combo 4:
        { foreground: "#FBBEA6", background: "#5839B5" },
        // Combo 5:
        { foreground: "#8A350D", background: "#FFDB0D" }
    ]

   var randomnumber = Math.floor((Math.random() * colorThemes.length));

   var selector = colorThemes[randomnumber]

   if (selector.foreground === "#0A1C6B" || selector.foreground === "#5DF0AD" || selector.foreground === "#C2F5FF" || selector.foreground === "#ABD1fA" || selector.foreground === "#FBBEA6" || selector.foreground === "#FACCD4" || selector.foreground === "#FF5919" ||  selector.foreground === "#D9F2AD" || selector.foreground === "#83BF25"){

            copyCount[i].style.color = selector.background;

            }
        }'

谢谢

【问题讨论】:

标签: javascript if-statement


【解决方案1】:

你可以试试Array#filter

if (colorThemes.filter(a => (selector.foreground === a.foreground|| selector.foreground == a.background)).length > 0) {
  copyCount[i].style.color = selector.background;
} }

【讨论】:

    【解决方案2】:

    您可以创建一个包含所有颜色的数组,然后检查所选颜色是否包含在此数组中。

    const colorThemes = [
      { foreground: "#0A1C6B", background: "#5DF0AD" },
      { foreground: "#C2F5FF", background: "#0A1C6B" },
      { foreground: "#583985", background: "#CCCCF0" },
      { foreground: "#FBBEA6", background: "#5839B5" },
      { foreground: "#8A350D", background: "#FFDB0D" }
    ]
    
    const colors = colorThemes.reduce((acc, curr) => {
      acc.push(curr.foreground, curr.background);
      
      return acc;
    }, []);
    
    const randomnumber = Math.floor((Math.random() * colorThemes.length));
    
    const selector = colorThemes[randomnumber]
    
    if (colors.includes(selector.foreground)) {
      console.log('Success');
    }

    【讨论】:

      【解决方案3】:

      您可以将Array#indexOf 与颜色数组一起使用。

      var colorThemes = [{ foreground: "#0A1C6B", background: "#5DF0AD" }, { foreground: "#C2F5FF", background: "#0A1C6B" }, { foreground: "#583985", background: "#CCCCF0" }, { foreground: "#FBBEA6", background: "#5839B5" }, { foreground: "#8A350D", background: "#FFDB0D" }],
          randomnumber = Math.floor(Math.random() * colorThemes.length),
          selector = colorThemes[randomnumber],
          changeColors = ["#0A1C6B", "#5DF0AD", "#C2F5FF", "#ABD1fA", "#FBBEA6", "#FACCD4", "#FF5919", "#D9F2AD", "#83BF25"];
      
      if (changeColors.indexOf(selector.foreground) !== -1) {
          console.log('change color!');
          //copyCount[i].style.color = selector.background;
      }

      在 ES6 中,您可以使用 Set 作为颜色

      var colorThemes = [{ foreground: "#0A1C6B", background: "#5DF0AD" }, { foreground: "#C2F5FF", background: "#0A1C6B" }, { foreground: "#583985", background: "#CCCCF0" }, { foreground: "#FBBEA6", background: "#5839B5" }, { foreground: "#8A350D", background: "#FFDB0D" }],
          randomnumber = Math.floor(Math.random() * colorThemes.length),
          selector = colorThemes[randomnumber],
          colorSet = new Set(["#0A1C6B", "#5DF0AD", "#C2F5FF", "#ABD1fA", "#FBBEA6", "#FACCD4", "#FF5919", "#D9F2AD", "#83BF25"]);
      
      if (colorSet.has(selector.foreground)) {
          console.log('change color!');
          //copyCount[i].style.color = selector.background;
      } else {
          console.log('nothing has changed!');
      }

      【讨论】:

        【解决方案4】:

        不要使用 if 语句。它们是代码气味。

        var colorThemes = {
          "#0A1C6B": "#5DF0AD"
          , "#C2F5FF": "#0A1C6B"
          , "#583985": "#CCCCF0"
          , "#FBBEA6": "#5839B5"
          , "#8A350D": "#FFDB0D"
        };
        
        var foregroundColors = Object.keys(colorThemes);
        var randomForegroundIdx = Math.floor(Math.random() * colorThemes.length);
        var randomForeground = foregroundColors[randomForegroundIdx];
        copyCount[i].style.color = colorThemes[randomForeground];
        

        【讨论】:

          猜你喜欢
          • 2021-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多