0

我有一个代表游戏元素的 6 个不同单词的基本数组。只是想知道如何将数组中每个单词的实例数相乘。

var gameItem = [cattle, wood, stone, metal, grain, craft];

也就是说,假设我希望将每个单词的 10 个实例添加到数组中,我该怎么做?顺序并不重要,因为它会被洗牌。

4

3 回答 3

4

不要忘记,除非您定义每个变量,否则您的数组不起作用。但据我了解,这些是单词,而不是变量。所以正确的数组声明是:

var newGameItem = ["cattle", "wood", "stone", "metal", "grain", "craft"]

要重复该数组 10 次,您可以使用 for 循环和数组方法concat()

var newGameItem = [];
for(var i=0 ; i<10 ; i++) {
    newGameItem = newGameItem.concat(gameItem);
}

> newGameItem : ["cattle", "wood", "stone", "metal", "grain", "craft", "cattle" ... ]

我不知道您对此有何想法,但是,如果您想存储大量此类元素,例如,玩家有 1 头牛、12 块木头、20 块石头等……您可能应该有一个更好的数据结构,如下所示:

 var gameItem = {"cattle" : 1, "wood" : 12, "stone" : 20, "metal" : 0, "grain" : 0, "craft" : 0 };

所以通过这样做gameItem.wood,你会得到结果> 12

于 2013-02-04T01:38:11.003 回答
1

你只需要几个循环:

function dupElements(arr, n) {
    for (var i = 0, len = arr.length; i < len; i++) {
        for (var j = 0; j < n; j++) {
            arr.push(arr[i]);
        }
    }
}

dupElements(gameItem, 10);

外循环循环通过初始元素。内部循环添加n每个副本。

于 2013-02-04T01:30:30.680 回答
1

你可以做:

var gameItem = ['cattle', 'wood', 'stone', 'metal', 'grain', 'craft'];
var doublearr = gameItem.concat(gameItem); //x2
gameItem = doublearr.concat(doublearr);//x4
gameItem = gameItem.concat(gameItem );//x8
gameItem = gameItem.concat(doublearr);//x10 
alert(gameItem);    

将数组连接到自身,直到到达最近的 ^2(在我们的例子中为 8 = 2^3),然后添加其余部分。

我发布此解决方案是因为您在其中一个评论中写道,您希望得到一些性能不密集的东西。但我同意其他人的观点,即维护一个简单的 for 循环更具可读性和更容易。因此,如果您只有 x10 - 请保持简单。

于 2013-02-04T01:37:36.003 回答