我有一个代表游戏元素的 6 个不同单词的基本数组。只是想知道如何将数组中每个单词的实例数相乘。
var gameItem = [cattle, wood, stone, metal, grain, craft];
也就是说,假设我希望将每个单词的 10 个实例添加到数组中,我该怎么做?顺序并不重要,因为它会被洗牌。
我有一个代表游戏元素的 6 个不同单词的基本数组。只是想知道如何将数组中每个单词的实例数相乘。
var gameItem = [cattle, wood, stone, metal, grain, craft];
也就是说,假设我希望将每个单词的 10 个实例添加到数组中,我该怎么做?顺序并不重要,因为它会被洗牌。
不要忘记,除非您定义每个变量,否则您的数组不起作用。但据我了解,这些是单词,而不是变量。所以正确的数组声明是:
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
你只需要几个循环:
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
每个副本。
你可以做:
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 - 请保持简单。