在javascript中搜索数组

时间:2017-05-04 03:59:31

标签: javascript arrays

我已经尝试了一段时间在一个阵列中搜索,我已经看过所有其他问题,甚至有点像我的,没有任何作用,所以我要求任何帮助你现在可以给...

我有一个内部比简单的字符串数组更复杂的数组

    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);
        }

我试图发布一个不太长的问题,但我确定还有很多关于我需要调整的代码才能做到这一点。我想我只是在询问是否有一些你认为可以继续工作的明显事物。我已经看过这个网站上的大多数答案都遇到了类似的问题,但这一切都只是非常糟糕,所以任何其他支持都会受到高度赞赏。

2 个答案:

答案 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()方法。