javascript - 将对象插入数组中的键内?

标签 javascript arrays firebase firebase-realtime-database ionic2

我将 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/

相关文章:

javascript - Node.JS 对象原型(prototype)在 Redis 中只能是一个 Object 或 null

php - 从关键字创建高质量、独特的反向链接,以提高 SEO 和搜索引擎排名

javascript - 滚动时 react native 自动隐藏导航 ios

java - 删除多个父节点上的特定子节点

javascript - 如何从 Firebase 获取对象数组?

Javascript循环节点数组获取替代条目

c# - 从数组中获取字符串或在单行中设置默认值

javascript - 有没有更好的方法来提高对象中包含多个数组的算法的复杂性

java - 以下程序在 "else"部分有问题

ios - 如何从 firebase 数据库中的许多子项中检索数据