【问题标题】:Sorting Value By Child按子项排序值
【发布时间】:2020-06-13 18:33:04
【问题描述】:

如何按子值对某些值进行排序?我这里有这些数据:

{
  "229016449593769984": { "coins": 196 },
  "286591003794604034": { "coins": 310 },
  "534534453533050240": { "coins": 0 }
  "423424434234234423": { "coins": 0 }
  "786438864582733432": { "coins": 0 }
  "472462364710480242": { "coins": 0 }
  "213123123455343643": { "coins": 0 }
  "351864080354639883": { "coins": 271 },
  "360700960823050240": { "coins": 3 },
  "445035187370328066": { "coins": 289 },
  "655256461101891585": { "coins": 976 }
}

但我希望它看起来像这样:

{
  "655256461101891585": { "coins": 976 },
  "286591003794604034": { "coins": 310 },
  "445035187370328066": { "coins": 289 },
  "351864080354639883": { "coins": 271 },
  "229016449593769984": { "coins": 196 },
  "360700960823050240": { "coins": 3 }
  "534534453533050240": { "coins": 0 }
  "423424434234234423": { "coins": 0 }
  "786438864582733432": { "coins": 0 }
  "472462364710480242": { "coins": 0 }
  "213123123455343643": { "coins": 0 }
}

(降序/从高到低)我也希望它过滤掉 10,我可以映射这些数据吗?

【问题讨论】:

  • 我不认为 js 对象是有序的。使用map 并按顺序插入数据会更合适。

标签: node.js firebase npm firebase-realtime-database


【解决方案1】:

正如 khuynh 所说,JSON 对象中的键是无序的。但如果您从 Firebase 检索这些数据,您可能正在寻找:

ref.orderByChild("coins").once("value").then((snapshot) => {
    snapshot.forEach((child) => {
        console.log(child.key, child.val().coins);
    });
});

在这里,ref 变量指向您共享的 JSON 的根。它从该位置检索所有子节点,按其coins 属性的值排序。然后它使用DataSnapshot.forEach 来确保以正确的顺序打印结果。

【讨论】:

    【解决方案2】:

    如果它不是firebase对象或您的问题中提到的,仅用于按降序转换您的对象:

     var obj = {
      "229016449593769984": { "coins": 196 },
      "286591003794604034": { "coins": 310 },
      "534534453533050240": { "coins": 0 },
      "423424434234234423": { "coins": 0 },
      "786438864582733432": { "coins": 0 },
      "472462364710480242": { "coins": 0 },
      "213123123455343643": { "coins": 0 },
      "351864080354639883": { "coins": 271 },
      "360700960823050240": { "coins": 3 },
      "445035187370328066": { "coins": 289 },
      "655256461101891585": { "coins": 976 }
    };
    obj1 = Object.keys(obj)
    s = [];
    for(var innerObj of obj1) {
        var x = {};
        x['name'] =  innerObj.toString();
        x['coins'] =  obj[innerObj].coins;
        s.push(x);
    }
    s1 = s.sort((a, b)=>{return b.coins-a.coins})
    console.log(s1)
    

    S1 是您需要的结果集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-25
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多