我正在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);
欢迎任何帮助或想法,谢谢。
所以我保存了第一个键值以及ida
和volta
所以我可以简单地遍历它,获取键值和一切没有太多问题,但是因为我需要通过{{过滤1}}它出现在local
和ida
内作为另一个数组(因为我有很多这些值),所以它现在看起来像这样:
那么我现在如何访问volta
?是否最好只使用所有local
创建另一个对象,并为每个local
创建一个键,以便我可以返回值?
记住这是Ionic 2的搜索栏代码,而我的JSON有超过4k行:
linha
提前致谢:)
答案 0 :(得分:0)
关于如何设计数据结构的个人经验。因此我不能说以下方法是最好的方法。
首先,在我们有复杂数据结构的情况下,我不喜欢在javascript中使用map(a.k.a。对象作为数据结构)。主要原因与您面临的问题非常相关,设计对象无法迭代。是的,您可以使用Object.keys()
或Object.values()
,但它们非常丑陋且难以适应每种情况。
将第一把钥匙作为财产是一个很好的举动。这是第二个问题。您的结构中似乎有一个假设:一个linha
仅映射到一个local
或一个local
仅与一个linha
相关。如果是这样,我建议仅为linha
和local
关系构建另一个单独的地图。
另一种方法是将数据结构规范化为多个独立的javascript对象,就像您在数据库中所做的那样。通过这样做,您可以最大化数据灵活性,您可以通过Array.prototype.filter()
,Array.prototype.map()
查询任何内容,甚至可以通过索引直接访问。但是,这种方法可能会增加代码行,因为您需要管理多个映射。