SearchBar深入搜索JSON

时间:2017-03-23 16:17:26

标签: json angular firebase ionic2

我正在IONIC 2中实现一个搜索栏,在一个视图中搜索JSON,以便将其详细信息发送到另一个视图。

我有这个JSON:

{
  "Alphaville I": { //FIRST KEY
    "ida": [{ //SECOND KEYS
      "hora": "05:40",
      "local": "AV. FERNÃO DIAS PAES LEME (Pref. Várzea Paulista)"
    },... ],
    "volta": [{ //SECOND KEYS
      "hora": "05:40",
      "local": "AV. FERNÃO DIAS PAES LEME (Pref. Várzea Paulista)"
    },... ]
  }, ... //MULTIPLE ITENS
}

因此,在一个视图中,我创建了一个包含第一个键的列表(如Alphaville I),但我需要搜索其中的local

但是Angular 2 * ngFor需要一个数组,所以我遍历我的对象并将其推送到一个数组,这样就排除了我的第一个键,所以我现在正在做的事情(当然没有搜索)正在保存一个数组中的键,指向索引并将jsonResultExample[index]传递给另一个页面。

我正在使用Seachbar Component Docs中的基本搜索栏示例。

所以我需要的是:按local键搜索并返回包含输入文本的节点的第一个键(Alphaville I),其他local可以出现在其他节点中第一把钥匙。

我该怎么做?我无法发布更好的代码,因为我没有尝试任何东西。

有没有更好的方法来构建我的JSON呢? (我正在使用firebase btw);

欢迎任何帮助或想法,谢谢。

修改

所以我保存了第一个键值以及idavolta所以我可以简单地遍历它,获取键值和一切没有太多问题,但是因为我需要通过{{过滤1}}它出现在localida内作为另一个数组(因为我有很多这些值),所以它现在看起来像这样:

My Object

那么我现在如何访问volta?是否最好只使用所有local创建另一个对象,并为每个local创建一个键,以便我可以返回值?

记住这是Ionic 2的搜索栏代码,而我的JSON有超过4k行:

linha

提前致谢:)

1 个答案:

答案 0 :(得分:0)

关于如何设计数据结构的个人经验。因此我不能说以下方法是最好的方法。

首先,在我们有复杂数据结构的情况下,我不喜欢在javascript中使用map(a.k.a。对象作为数据结构)。主要原因与您面临的问题非常相关,设计对象无法迭代。是的,您可以使用Object.keys()Object.values(),但它们非常丑陋且难以适应每种情况。

将第一把钥匙作为财产是一个很好的举动。这是第二个问题。您的结构中似乎有一个假设:一个linha仅映射到一个local或一个local仅与一个linha相关。如果是这样,我建议仅为linhalocal关系构建另一个单独的地图。

另一种方法是将数据结构规范化为多个独立的javascript对象,就像您在数据库中所做的那样。通过这样做,您可以最大化数据灵活性,您可以通过Array.prototype.filter()Array.prototype.map()查询任何内容,甚至可以通过索引直接访问。但是,这种方法可能会增加代码行,因为您需要管理多个映射。