【问题标题】:Sort firebase data in descending order using negative timestamp使用负时间戳按降序对 Firebase 数据进行排序
【发布时间】:2016-07-24 03:17:06
【问题描述】:

以上是我的 firebase 数据库的屏幕截图。我正在尝试使用负时间戳按降序对 Firebase 数据进行排序。我正在使用以下命令:

  const feedRef = database.ref('ducks')
  feedRef.orderByChild('timestamp').on('value', (snapshot, error) => {
    const feed = snapshot.val()})

我一直以与数据库相同的顺序获取提要,而不是我想要的降序。我认为它不起作用,因为鸭子端点没有子名称时间戳 我将如何实现这一目标?推送生成的密钥是否有时间戳数据?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    当您在快照上调用 .val() 时,它会被转换为 JSON 对象。 JavaScript 对象中的键按照定义是无序的(尽管许多实现会按字典顺序迭代键)。

    如果您在 Firebase 数据库上运行查询,则必须确保在以正确顺序获取项目之前未将其转换为 JSON。在你的情况下,使用DataSnapshot.forEach():

    const feedRef = database.ref('ducks')
    var feed = [];
    feedRef.orderByChild('timestamp').on('value', (snapshot, error) => {
        snapshot.forEach((duckSnap) => {
            const duck = duckSnap.val()
            console.log(duckSnap.key+'='+duck.name);
            feed.push(duck);
        });
        console.log(feed);
    });
    

    【讨论】:

    • 我可能错了,但不应该是duckSnap.val()。同样当我迭代快照时,我应该通过按我想要的顺序将数据推送到另一个对象来构建另一个对象?
    • 我尝试了以下命令仍然是升序database.ref('ducks').orderByChild('timestamp').on('value', (snapshot, error) => { let feed = {} snapshot.forEach((childSnapshot) => { feed[childSnapshot.key] = childSnapshot.val() }) console.log('ducks feed: ', feed)
    • snapshot.forEach() 将以正确的顺序执行。但 JSON 是无序的。因此,如果您根据鸭子的childSnapshot.key 将鸭子放入feed,则生成的feed 对象将再次无序。我已经扩展了我的答案以包含一个示例。
    • @jasan:在循环内它确实应该使用duckSnap。感谢您指出这一点,我现在修复了它(我不知道您的编辑为什么在审核中被拒绝)。
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2019-02-08
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多