javascript - JavaScript 递归未返回所需结果
问题描述
我有一个充满蓝图的对象。蓝图是另一个蓝图或成分的数组。我正在尝试显示构建“停滞设备”的路径,但输出缺少一些步骤。输出显示:
["Heat Capacitor",["Frost Crystal","Solanium"]]
["Poly Fibre",["Cactus Flesh","Star Bulb"]]
["Circuit Board",["Heat Capacitor","Poly Fibre"]]
-- missing output. see below --
["Quantum Processor",["Circuit Board","Superconductor"]]
["Lubricant",["Faecium","Gamma Root"]]
["Glass",["Frost Crystal"]]
["Living Glass",["Lubricant","Glass"]]
["Enriched Carbon",["Radon","Condensed Carbon"]]
["Nitrogen Salt",["Nitrogen","Condensed Carbon"]]
["Hot Ice",["Enriched Carbon","Nitrogen Salt"]]
-- missing output. see below --
["Cryo-Pump",["Hot Ice","Thermic Condensate"]]
["Cryogenic Chamber",["Living Glass","Cryo-Pump"]]
["Aronium",["Paraffinium","Ionised Cobalt"]]
["Mango-Gold",["Phosphorus","Ionised Cobalt"]]
["Grantine",["Dioxite","Ionised Cobalt"]]
["Iridesite",["Aronium","Mango-Gold","Grantine"]]
["Stasis Device",["Quantum Processor","Cryogenic Chamber","Iridesite"]]
在我预期的“量子处理器”之前
["Termic Condensate",["Sulphurine","Condensed Carbon"]
["Nitrogen Salt",["Nitrogen","Condensed Carbon"]]
["Semiconductor",["Thermic Condensate","Nitrogen Salt"]]
["Enriched Carbon",["Radon","Condensed Carbon"]]
["Super Conductor",["Semiconductor","Enriched Carbon"]]
在“低温泵”之前,我期望
["Termic Condensate",["Sulphurine","Condensed Carbon"]
代码如下,也位于 jsFiddle https://jsfiddle.net/shirha/7azgyu36/48/
<pre id="log"></pre><script>
const db = Object.create(null);
db.Valuables = JSON.parse(`{
"Aronium": ["Paraffinium","Ionised Cobalt"],
"Circuit Board": ["Heat Capacitor","Poly Fibre"],
"Cryo-Pump": ["Hot Ice","Thermic Condensate"],
"Cryogenic Chamber": ["Living Glass","Cryo-Pump"],
"Enriched Carbon": ["Radon","Condensed Carbon"],
"Glass": ["Frost Crystal"],
"Grantine": ["Dioxite","Ionised Cobalt"],
"Heat Capacitor": ["Frost Crystal","Solanium"],
"Hot Ice": ["Enriched Carbon","Nitrogen Salt"],
"Iridesite": ["Aronium","Mango-Gold","Grantine"],
"Living Glass": ["Lubricant","Glass"],
"Lubricant": ["Faecium","Gamma Root"],
"Mango-Gold": ["Phosphorus","Ionised Cobalt"],
"Nitrogen Salt": ["Nitrogen","Condensed Carbon"],
"Poly Fibre": ["Cactus Flesh","Star Bulb"],
"Quantum Processor": ["Circuit Board","Superconductor"],
"Semiconductor": ["Thermic Condensate","Nitrogen Salt"],
"Stasis Device": ["Quantum Processor","Cryogenic Chamber","Iridesite"],
"Super Conductor": ["Semiconductor","Enriched Carbon"],
"Termic Condensate": ["Sulphurine","Condensed Carbon"]
}`);
function analyse(recipe){
let blueprint = db.Valuables[recipe];
for(let i = 0; i < blueprint.length; i++){
if(blueprint[i] in db.Valuables){
analyse(blueprint[i]);
}
}
log.innerHTML += JSON.stringify([recipe,blueprint])+"<br>";
}
log = document.getElementById('log');
analyse("Stasis Device");
</script>
这是我能做到的最接近的,而且不会让它变得更糟。谢谢你的帮助。
jsFiddle 已更正!谢谢大家。
解决方案
有几个拼写错误:
- 超导体 → 超导体
- 热冷凝水 → 热冷凝水
推荐阅读
- mysql - MySQL SELECT / GROUP BY losing NULLs
- java - 尝试 catch 将我的变量重置为原始值,即使它是全局变量
- java - 发现多个 ejb 的接口类型为用于绑定
- ruby - 如何在 Windows 上的 ruby 中修复 (RubyInstaller::Runtime::DllDirectory::WinApiError)?
- python - 在 python 3.7 中使用 exec() 导入别名不起作用
- ruby-on-rails - 通过细化添加的方法在 Rails 控制器中不可见
- tensorflow - Keras 损失为负,准确率下降,但预测良好?
- python - Python:出现错误:TypeError:“int”类型的参数不可迭代
- python - 如何使用 Odoo 11 上的服务器操作为扩展字段编写更新代码?
- r - 在 R 中为 httr::POST 创建嵌套的 Json Obj