我在Firebase 3中使用了Ionic 2,我有一个读取方法,该方法返回带有键和值的JSON,这是结构的一部分
{
"1475323200" : {
"-KfNUUZf9ehNdVSCiBO": {
"date": 1489690818,
"msg": "Mussum Ipsum",
"title": "Pagamentos"
}
},
"1478001600": {
"-KfNUUZf9ehNdVSCiBO": {
"date": 1489690818,
"msg": "Mussum Ipsum",
"title": "Pagamentos"
}
}
}
这就是我现在拥有的代码或我正在尝试做的事情。之后我会解释
ionViewWillLoad() {
firebase.database().ref('Administrative/Informs').on('value', snap => {
if (snap.val() != null) {
let data = snap.val(); //will be an object
this.organizer(data).then(res => {
console.log(this.informs);
})
} else {
this.noInforms == true;
}
});
}
organizer = (data: any): Promise<boolean> => {
for (var i = Object.keys(data).length; i > 0; i--) {
this.informs.push(data[i]);
}
return new Promise<boolean>(res => {
res(true);
})
}
Firebase 上的"value"查询以升序格式返回键,但稍后键将与 momentJS 一起使用以按月分隔信息,但我必须以降序格式使用,因此它从实际月份到最新保存的月份,现在它2016/dec > 2017/jan > 2017/feb > ...
,我需要2017/mar > 2017/feb > 2017/jan > ...
我尝试了以下方法来实现这一目标:
- 使用
this.informs = Object.keys(snap.val()).reverse();
| 它只保存键和更多 6 或 7 个未定义的字段 - 使用 for inside for,如
for(key in snap.val()){ this.informs.push(key)}
和 inside other 将所有值推送到新对象内部,然后像this.informs[key] = values;
一样将其归因 - 将物体推入
this.informs[key]
. - 使用
child_added
获取值,但它返回我每个孩子,没有我将用来获取月份的键。
那么,如何将相同的对象保存在数组中,但被第一个键反转?正弦我将在 *ng 中使用它因为我需要它是一个带有长度参数的数组。
Object.keys
将以任意顺序创建对象的键数组。如果要对这些键进行排序,可以执行以下操作:
var data = {
"1475323200" : {
"-KfNUUZf9ehNdVSCiBO": {
"date": 1489690818,
"msg": "Mussum Ipsum",
"title": "Pagamentos"
}
},
"1478001600": {
"-KfNUUZf9ehNdVSCiBO": {
"date": 1489690818,
"msg": "Mussum Ipsum",
"title": "Pagamentos"
}
}
}
window.informs = [];
Object.keys(data).sort((a,b) => {parseInt(a) - parseInt(b)}).forEach(k => this.informs.push(data[k]))
console.log(informs);
.sort((a,b) => {parseInt(a) - parseInt(b)})
将按升序对键进行排序,对于降序,请使用.sort((a,b) => {parseInt(b) - parseInt(a)})