我已经尝试了一段时间在一个阵列中搜索,我已经看过所有其他问题,甚至有点像我的,没有任何作用,所以我要求任何帮助你现在可以给...
我有一个内部比简单的字符串数组更复杂的数组
var elementDefns = [
{"element":"water", "combos": {"air":"steam", "earth":"sand"} },
{"element":"fire", "combos": {"earth":"lava", "air":"energy"} },
{"element":"air", "combos": {"water":"steam", "earth":"dust"} },
{"element":"earth", "combos": {"water":"swamp", "fire":"lava"} },
];
两个元素(由用户)挑选,这些元素被组合以创建新元素。我想在元素中搜索可以制作的任何组合。理想情况下,我想使用Array.prototype.find,虽然我无法弄清楚如何正确使用polyfill并且我不确定我是否正确地写了它,所以它继续不工作
var elementOne = $("#board img:first-child").attr('id');
var elementTwo = $("#board img:last-child").attr('id');
function findElement(element) {
return elementDefns.element === elementOne;
}
board是元素卡点击后转到的id div。我也试过一个循环
for (var i=0, tot=elementDefns.length; i < tot; i++) {
var indexHelp = elementDefns[i].element;
var find = indexHelp.search(elementOne);
console.log(find);
}
我试图发布一个不太长的问题,但我确定还有很多关于我需要调整的代码才能做到这一点。我想我只是在询问是否有一些你认为可以继续工作的明显事物。我已经看过这个网站上的大多数答案都遇到了类似的问题,但这一切都只是非常糟糕,所以任何其他支持都会受到高度赞赏。
答案 0 :(得分:2)
我有一个内部比简单的字符串数组更复杂的数组
是的,但为什么呢?摆脱额外的层,这是微不足道的
var e1 = "water";
var e2 = "air";
var elementDefns = {
"water": {"combos": {"air":"steam", "earth":"sand"} },
"fire": {"combos": {"earth":"lava", "air":"energy"} },
"air": {"combos": {"water":"steam", "earth":"dust"} },
"earth": {"combos": {"water":"swamp", "fire":"lava"} },
};
elementDefns [e1] .combos [e2] =&gt; &#34;蒸汽&#34;
答案 1 :(得分:1)
如果您想保留数据结构,可以像这样过滤它:
var matches = elementDefns
.filter(e => e.element == first && e.combos[second] !== null)
.map(e => e.combos[second]);
第一行过滤掉所有匹配项,secon将其映射到实际匹配字符串(元素名称)。您所说的find()
只会返回匹配的第一个值,我想您希望 all ,因此这将是filter()
方法。