【问题标题】:JavaScript: How Can I Make A Var "Array" Work?JavaScript:如何使 Var“数组”工作?
【发布时间】:2018-04-27 22:46:08
【问题描述】:

有没有办法使用某种“数组”来命名变量?我的代码是这样的:

for(var i = 0; i < (getHorizontalSquares * getVerticalSquares); i++){
    var Square[i] = document.createElement("div");
    Square[i].style.position = "relative";
    Square[i].style.float = "left";
    Square[i].style.width = "50px";
    Square[i].style.height = "50px";
    Square[i].id = "square" + (i + 1);
    for(var ii = 0; ii < 6; ii++){
        var TestColor = TestColorArray[Math.round(Math.random()*(TestColorArray.length - 1))];
        getTestColor += TestColor;
    }
    Square[i].style.backgroundColor = "#" + getTestColor;
    SquareCont.appendChild(Square[i]);
}

我知道我的代码不起作用,但我想实现相同的想法,以便得到这样的结果:

var Square1...
var Square2...
var Square3...
var Square4...
var Square5...
etc

我也尝试过"Concentration" var,但没有成功。我该怎么做才能使文档不会多次附加同一个正方形?

【问题讨论】:

  • 你不能那样做。为什么不直接使用array 并让索引引用i'th Square
  • 不能使用普通变量吗?比如var square = document.createElement("div"); square.style.position = "relative"; square.style.float = "left";etc...
  • 您可以通过将属性添加到 OBJECT 而不是数组来做到这一点...您只需将创建的新 div 添加到数组中,这就是您所追求的。 var square = {}; 然后在你的 for 循环中:square['Square'+i] = 'something'; 会给你一个对象(正方形),你有 square.Square1、square.Square2 等,你可以循环遍历对象属性,就像你可以数组一样。
  • @JohanP 我想过,但我想我可以走捷径。
  • @AndrewLohr 当我尝试这样做时,另一个 div 的背景颜色不会改变。

标签: javascript arrays var


【解决方案1】:

您的声明语法无效。但是,我认为您想要达到的更大一点是能够使用动态创建的元素填充数组,并且您可以这样做:

var squares = [];  // Array must exist before you can populate it

var testColorArray = ["green", "yellow", "blue", "orange", "silver"];
var getTestColor = null;

function makeSquares(count){

  for(var i = 0; i < count; i++){
    // Just create the element and configure it. No need to worry about the array yet
    var element = document.createElement("div");
    element.style.float = "left";
    element.style.width = "75px";
    element.style.height = "75px";
    element.id = "square" + (i + 1);
    element.style.backgroundColor = testColorArray[Math.floor(Math.random()* testColorArray.length)];
    element.textContent = element.id;
    squareCont.appendChild(element);
    
    // Now, add the element to the arrray
    squares.push(element);
  }
  
  // Test:
  console.log(squares);
}

makeSquares(10);
&lt;div id="squareCont"&gt;&lt;/div&gt;

【讨论】:

    【解决方案2】:

    var Square = {};
    var SquareCont = document.createElement('div');
    var getHorizontalSquares = 10;
    var getVerticalSquares = 10;
    var TestColorArray = ['a','b','c','f','e','0','1','2','3','3','4','5'];
    var getTestColor = '';
    for(var i = 0; i < (getHorizontalSquares * getVerticalSquares); i++){
        Square['Square'+i] = document.createElement("div");
        Square['Square'+i].style.position = "relative";
        Square['Square'+i].style.float = "left";
        Square['Square'+i].style.width = "50px";
        Square['Square'+i].style.height = "50px";
        Square['Square'+i].id = "square" + (i + 1);
        for(var ii = 0; ii < 6; ii++){
            var TestColor = TestColorArray[Math.round(Math.random()*(TestColorArray.length - 1))];
            getTestColor += TestColor;
        }
        Square['Square'+i].style.backgroundColor = "#" + getTestColor;
        SquareCont.appendChild(Square['Square'+i]);
        getTestColor = '';
        
    }
    console.log(Square);

    此示例使用对象而不是数组来满足您的需求,但满足您动态创建可访问的 Square1、Square2 等的愿望......它们都包含在 Square 中。在带有这个 sn-p 的控制台中,您将看到创建了 100 个正方形并将其添加到 Square 对象中。它们可以通过 Square.SquareX(其中 X 是某个数字)或 Square['SquareX'] 或 Square['Square'+X] 访问,其中 X 是某个数字。

    【讨论】:

    • 你解决了我遇到的问题。这是出于完全不同的原因:十六进制代码没有被重置。我也发现了问题。就是我没有这条线:getTestColor = '';
    • 哈哈,很高兴你明白了!
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多