0

我正在努力自己学习 javascrip+jquery,并且也在努力学习它。因此试图执行 DRY 规则。

我发现自己遇到了一个问题,我有一个数组,

var animals = [4];

一个函数,

var legs = function(amount){
    this.amount = amount;
    this.body = Math.floor(Math.random()*amount)+1;
}

和一个邪恶的 for 循环。我还有 5 个 div,称为 printAnimal1、printAnimal2 等等。我希望将数组中的每个值打印到其中。

for(i = 0; i < animals.length; i++){
        animals[i] = new legs(6);
        $(".printAnimal"+i).append("animals[i]");
}

我觉得好像我接近正确的事情,但我似乎无法弄清楚。我也尝试过这样的事情:

for(i = 0; i < animals.length; i++){
        animals[i] = new legs(6);
            $this = $(".printAnimal");
            $(this+i).append("animals[i]");
}

但是其中一个问题似乎是“+i”,我无法从中得出正面或反面。

我也知道我可以简单地做:

 $(".printAnimal1").append("animals[i]");
 $(".printAnimal2").append("animals[i]");
 $(".printAnimal3").append("animals[i]");
...

但这会打破 DRY 规则。尝试使用 for 循环执行此操作是否完全错误,或者可以完成吗?或者有没有更好的方法来做到这一点!谁能澄清一下?

4

3 回答 3

1

您的第一次尝试应该没问题,只要您在通话"animals[i]"中去掉引号( )append()$(".printAnimal"+i).append(animals[i])

另外,我假设您var i;在 for 循环之外声明?如果没有,您需要在 for 循环 ( for(var i=0....)中声明它

编辑:你的小提琴有问题

  1. 你从不打电话startGame()
  2. 你没有包括 jQuery
  3. 你不能(据我所知)附加任何不是 html 的东西——在你的情况下,你试图附加一个 js 对象。您希望最终结果是什么样的?

http://jsfiddle.net/SjHgh/1/是一个有效的小提琴,它表明 append() 可以按照您的想法工作。

编辑:忘记更新小提琴。现在更正链接。

编辑:重新阅读您对其他答案的回复,了解您想要什么。http://jsfiddle.net/SjHgh/3/是您想要的工作小提琴。更多注释:

  1. new你打电话时没有声明DICE
  2. 你必须引用你想要的字段,(因此dices[i].roll),而不仅仅是对象
于 2013-02-28T18:01:31.093 回答
0

根据您的评论添加另一个答案

var i, dicesThrown = [];

function throwDice(){
    return Math.ceil(Math.random() * 6);
}

//Throw 5 dices
for (i=0 ; i<5 ; i++){
    dicesThrown.push( throwDice() );
}

//Show the results
for (i=0 ; i<5 ; i++){
    $("body").append("<div>Dice " + (i+1) + ": " + dicesThrown[i] +"</div>");
}
于 2013-02-28T19:50:36.480 回答
0

只是一些评论:

这是声明一个只有一个项目的数组,该项目是数字 4

var animals = [4]; 

如果您仍然需要该数组,您应该执行以下操作:

var animals = []; // A shiny new and empty array

然后在 for 循环中添加项目,如下所示:

animals.push(new legs(6)); //This will add a new legs object to the end of the array

另外,将其添加到 div 后,您期望出现的内容是什么?

如果你想要腿的数量,你应该将它附加到元素(而不是直接腿对象)。

for(i = 0; i < animals.length; i++){
    animals.push(new legs(6));
    $(".printAnimal"+i).append(animals[i].body);
}
于 2013-02-28T18:08:57.920 回答