トランプの情報(cardInfo)を含む配列があります。配列のサンプルが以下のコードに追加されています。各カードに重複がある可能性があるので、この情報を使用して、そのタイプの各カード(プロパティ 'frequency1')の新しい配列(drawPile)にその情報をプッシュすることでデッキを作成します。ネストされたforループのプロパティを追加すると、各ループのforループと同じ値になります
var common = 4;
var uncommon = 3;
var rare = 2;
var cardInfo = [
{name:'Card A',frequency1:common,frequency2:rare,frequency3:0},
{name:'Card B',frequency1:common,frequency2:uncommon,frequency3:0},
{name:'Card C',frequency1:uncommon,frequency2:uncommon,frequency3:0}
];
var drawPile = [];
for (var cType = 0; cType < cardInfo.length; cType++) {
for (var freq = 0; freq < cardInfo[cType].frequency1; freq++) {
drawPile.push(cardInfo[cType]);
console.log(drawPile.length - 1);
drawPile[(drawPile.length - 1)].id = (drawPile.length - 1);
console.log(drawPile[(drawPile.length - 1)]);
}
}
得コンソールログは、しかし、すべての4「カードA」カードは、IDプロパティ3を有することを示す、すべての4「カードB」カードは、IDプロパティ7を有し、すべての3「カードC」カードidプロパティ10を持つ。これは、idプロパティを追加する前にすべての.push()コマンドに対してネストされた(freq)ループが実行されているかのようである。
他のstrangeness:jsfiddleでこのコードを実行すると、最初に実行してコンソールログを開くと、これらの結果をレプリケートできますが、コンソールlofが開いた後に実行すると、意図した通りに動作します。
各カードに一意の識別子が割り当てられるようにするにはどうすればよいですか?
EDIT:完全に新しいforループを作成して、特にidプロパティを追加する場合は全く同じ結果が得られますが、これはまったく見知らぬものです。this code。
@Gavin、それは奇妙です。これは、私が最初に実行したときに、後でコンソールを開いたときの結果です。http://oi67.tinypic.com/2r2ureb.jpg – OmniShift
"* all 4"カードAのカードはidプロパティ3 *を持っています。それらはすべて同じオブジェクトです。ループ内に新しいオブジェクトを作成して、異なるプロパティ値を与える必要があります。代入はオブジェクトをコピーしません。 – Bergi
@Bergi私はdrawPile配列にプッシュするたびに新しいオブジェクトを作成しません(プロパティと値は同じですが)。 – OmniShift