我将 Ionic 2 与 Firebase 3 结合使用,并且有一个读取方法,该方法返回带有键和值的 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 上的“值”查询以升序格式返回键,但这些键稍后将与 momentJS 一起使用以按月分隔信息,但我必须以降序格式使用 then,因此它与实际值不同最新保存的月份,现在是 2016/dec > 2017/jan > 2017/feb > ...
我需要 2017/mar > 2017/feb > 2017/jan > .. .
我尝试了以下方法来实现此目的:
- 使用
this.informs = Object.keys(snap.val()).reverse();
|它只保存键和更多 6 或 7 个未定义字段 - 在 for 内部使用 for,如
for(key in snap.val()){ this.informs.push(key)}
以及在 other 内部使用,用于将所有值推送到新对象中,然后归因它就像this.informs[key] = value;
- 将对象插入
this.informs[key]
内。 - 使用
child_added
获取值,但它会返回每个 child ,但没有我用来获取月份的 key 。
那么,如何将同一个对象保存在数组中,但按第一个键反转呢?正弦我将在 *ngFor 中使用它,因为我需要它是一个带有长度参数的数组。
最佳答案
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)})
关于javascript - 将对象插入数组中的键内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42858169/