我有一个由6个不同单词组成的基本数组,代表游戏元素。只是想知道如何将数组中每个单词的实例数相乘。
var gameItem = [cattle, wood, stone, metal, grain, craft];
也就是说,我想要将每个单词的10个实例添加到数组中,我该怎么做?订单并不重要,因为它会被洗牌。
答案 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 - 保持简单。