ゲーム要素を表す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
必要なのは2つのループだけです。
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)に達するまで配列をそれ自体に連結してから、残りを追加します。
このソリューションを投稿したのは、パフォーマンスを重視しないものを望んでいるというコメントの1つを書いたからです。しかし、私は他の人たちに同意します。単純なforループを維持する方が読みやすく簡単です。したがって、x10しかない場合は、シンプルにしてください。