【发布时间】:2017-03-27 18:15:10
【问题描述】:
我在 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);
欢迎任何帮助或想法,谢谢。
编辑
所以我将第一个键值与ida 和volta 一起保存,这样我就可以简单地遍历它,获取键值和所有内容而没有很多问题,但是由于我需要按local 过滤它出现在里面ida和volta作为另一个数组(因为我有很多这些值),所以它现在看起来像这样:
那么现在我如何访问local?仅使用所有 local 和每个 linha 的键创建另一个对象是否更好,以便我可以返回值?
记住这是 Ionic 2 的搜索栏代码,我的 JSON 有超过 4k 行:
getItems(ev: any) {
// Reset items back to all of the items
this.initializeItems();
// set val to the value of the searchbar
let val = ev.target.value;
// if the value is an empty string don't filter the items
if (val && val.trim() != '') {
this.items = this.items.filter((item) => {
return (item.toLowerCase().indexOf(val.toLowerCase()) > -1);
})
}
}
提前致谢:)
【问题讨论】:
-
如果我是你,我会创建一个 Map
将本地映射到第一个键列表,假设存在一对多关系。如何创建地图取决于 json 格式的可靠性。您可以编写一个循环遍历对象的每个属性的通用函数。
标签: json angular firebase ionic2