【问题标题】:JavaScript color ArrayJavaScript 颜色数组
【发布时间】:2020-02-23 11:47:44
【问题描述】:

我观看了 codecademy 视频,但无法随机化我的颜色数组。颜色不是随机的。我不确定我做错了什么。

    function getRandomColor() {
    var color;
    var colorArray = [
        "#FF6633",
        "#FFB399",
        "#FF33FF",
        "#FFFF99",
        "#00B3E6",
        "#E6B333",
        "#3366E6",
        "#999966",
        "#809980",
        "#E6FF80",
        "#1AFF33",
        "#999933",
        "#FF3380",
        "#CCCC00",
        "#66E64D",
        "#4D80CC",
        "#FF4D4D",
        "#99E6E6",
        "#6666FF"
    ];
    for (var i = 0; i < colorArray; i++) {
        color = colorArray[Math.floor(Math.random() * colorArray.length)];
    }
    return color;
}

【问题讨论】:

  • 这能回答你的问题吗? How to randomize (shuffle) a JavaScript array?
  • 你能澄清一下随机化你的颜色数组是什么意思吗?现在,您的代码会遍历所有颜色,然后返回随机选择的最后一种颜色。

标签: javascript arrays random


【解决方案1】:

我不知道您为什么需要 for 循环,但我很确定这是错误的。

有什么问题?

在您的情况下,不会执行循环,因为colorArray(in the condition) 不是数字。您可能想改用colorArray.length,但在这种情况下循环也没有意义。

随机选择一种颜色

如果您只想选择 一个 颜色,您可以将整个循环(以及 return 语句)替换为:

return colorArray[Math.floor(Math.random() * colorArray.length)];

这只会返回一个随机颜色。

随机播放

如果你想打乱整个数组,你可以使用下面的循环:

for (var i = 0; i < colorArray.length; i++) {
    let r=Math.floor(Math.random() * colorArray.length);
    color = colorArray[r];
    colorArray[r]=colorArray[i];
    colorArray[i]=color;
}

【讨论】:

  • 我认为 OP 正在尝试对数组本身进行洗牌("...并且无法随机化我的颜色 array")
【解决方案2】:

length 添加到您的循环for (var i = 0; i &lt; colorArray.length; i++)

function getRandomColor() {
    var color;
    var colorArray = [
       "#FF6633",
       "#FFB399",
       "#FF33FF",
       "#FFFF99",
       "#00B3E6",
       "#E6B333",
       "#3366E6",
       "#999966",
       "#809980",
       "#E6FF80",
       "#1AFF33",
       "#999933",
       "#FF3380",
       "#CCCC00",
       "#66E64D",
       "#4D80CC",
       "#FF4D4D",
       "#99E6E6",
       "#6666FF"
    ];
    for (var i = 0; i < colorArray.length; i++) {
       color = colorArray[Math.floor(Math.random() * colorArray.length)];
    }
    return color;
}

【讨论】:

    【解决方案3】:

    我认为您忘记将“.length”放在您的 for 循环中。 for(var i = 0; i &lt; colorArray.length; i++)

    【讨论】:

      【解决方案4】:

      如果你想洗牌你可以使用以下函数:

      var colorArray = ["#FF6633", "#FFB399", "#FF33FF", "#FFFF99", "#00B3E6", "#E6B333", "#3366E6", "#999966", "#809980", "#E6FF80", "#1AFF33", "#999933", "#FF3380", "#CCCC00", "#66E64D", "#4D80CC", "#FF4D4D", "#99E6E6", "#6666FF"];
      
      function shuffleArray() {
        colorArray.sort(function() {
          return Math.random() - 0.5;
        });
      }
      
      shuffleArray();
      console.log(colorArray);

      如果您只想获得随机物品,您可以这样做:

      var colorArray = ["#FF6633", "#FFB399", "#FF33FF", "#FFFF99", "#00B3E6", "#E6B333", "#3366E6", "#999966", "#809980", "#E6FF80", "#1AFF33", "#999933", "#FF3380", "#CCCC00", "#66E64D", "#4D80CC", "#FF4D4D", "#99E6E6", "#6666FF"];
      
      function getRandomColor() {
        return colorArray[Math.random() * colorArray.length | 0];
      }
      
      console.log(getRandomColor());

      【讨论】:

        【解决方案5】:

        你可以创建一个随机化的函数。

        function randomizeArr () {
           const randomLength=Math.floor(Math.random() * colorArr.length);
           return colorArr[randomLength];
        }
        

        在您的 for-loop 中,您的条件是错误的,它应该是 i &lt; colorArr.length 而不是 colorArr

        通常 arr.length属性而不是方法,例如 map()reduce() 等。

        希望我的回答很清楚!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-20
          • 2019-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-24
          • 2013-09-02
          • 1970-01-01
          相关资源
          最近更新 更多