私はこの小さなスクリプトを持っており、乱数をローリングして配列にプッシュします。アイテム(オブジェクト)が存在しない場合は追加する必要があり、存在しない場合は更新する必要があります。IDは一意の識別子である必要があります。どういうわけか私は重複したIDを取得し、なぜそれが起こるのかわかりません。
私はロールの後にこれを手に入れたいと思っていました(30ロールの例):
[{"id":1,"min":0,"max":18},{"id":2,"min":0,"max":2},{"id":3,"min":0,"max":10}]
の代わりに:
[{"id":1,"min":0,"max":7},{"id":2,"min":0,"max":2},{"id":3,"min":0,"max":10},{"id":1,"min":0,"max":11}]
誰かが問題が何であるかを知っていますか?前もって感謝します。
var coll_ = [];
for (i = 0; i < 30; i++) {
random_number = Math.floor((Math.random() * 3) + 1);
if (!coll_[random_number]) {
// Item doesnt exist so will be added to the array
coll_.push({
id: random_number,
min: 0,
max: 1
});
} else {
// Item exists so it will be updated
coll_[random_number]['max']++;
}
}
document.write(JSON.stringify(coll_));
coll
は配列です。チェックでは、coll_[random_number]
インデックスが存在するかどうかのみがチェックされます。これは、必ずしも。とは関係ありませんid
。配列を使用する代わりに、id
sでインデックス付けされたオブジェクトを使用し、反復が完了した後にそのオブジェクトの値を取得します。
const obj = {};
for (let i = 0; i < 30; i++)
{
const rand = Math.floor((Math.random() * 3) + 1);
if ( !obj[rand] ) {
// Item doesnt exist so will be added to the array
obj[rand] = {id: rand, min: 0, max: 1};
} else {
// Item exists so it will be updated
obj[rand].max++;
}
}
console.log(Object.values(obj));
また、グローバル変数を暗黙的に作成しないようにしてください。新しい変数名を使用するときは、常に最初にconst
(またはlet
またはvar
)で宣言してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加