私は機能を持っています:
function composeLootTables(lootType, result) {
for (var d in lootType.items) {
if (result[lootType.title] === undefined) {
result[lootType.title] = [[0],[0]];
}
result[lootType.title][d][0] = lootType.items[d][0];
result[lootType.title][d][1] = lootType.items[d][1];
composeLootTables(lootType.items[d][0], result);
}
return result;
}
最初にこれを解析します:
residential : {
title: "residential",
items:[
[generic, 0.7],
[military, 0.7],
[hospital, 0.7],
[Colt1911, 0.5]
]
},
そして、その他の rootType は次のいずれかになります。
var Colt1911 = {
title: "Colt 1911"
};
var generic = {
title: "Generic",
items: [[tin_can, 0.2],[jelly_bean, 0.3]]
};
var military = {
title: "Military",
items: [[bfg, 0.2],[akm, 0.3]]
};
var hospital = {
title: "Hospital",
items: [[condoms, 0.2],[zelyonka, 0.3]]
};
したがって、問題は次の文字列にあります。
result[lootType.title][d][0] = lootType.items[d][0];
result[lootType.title][d][1] = lootType.items[d][1];
Uncaught TypeError: Cannot set property '0' of undefined
console.log によるとresult[lootType][d] === undefined
、「d」が 2 または 3 になった場合のみ (それ以外の場合は「d」=== 0 または 1)。
配列の未定義フィールドに値を割り当てると、この値で埋められると想定していました。
私はすでに解決策を見つけています -
result[lootType.title][d] = lootType.items[d];
正常に動作し、適切な 2 次元配列を返しますが、それらの配列との関係を知りたいです。