将Array项添加到Array X次

时间:2013-02-04 01:21:25

标签: javascript arrays loops

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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个副本。

答案 2 :(得分: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 - 保持简单。