Firebase:在不知道密钥的情况下获得孩子的价值

时间:2017-08-10 07:27:33

标签: javascript firebase firebase-realtime-database

如何在不知道子元素的键的情况下获取子元素的值?下面的示例数据结构;

->cars
-->3282jasjd893j: doors
-->819idid82jkdf: windows
-->fjf842jr8448r: audi

我需要在不知道钥匙的情况下获取“门”,“窗户”,“奥迪”的值。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:1)

非常感谢您的所有意见和建议。我现在得到了答案,现在是:

     let inputArray = [];
     snapshot.forEach(snap => {
     inputArray.push(snap.val());
     return false;
   });

答案 1 :(得分:1)

虽然你回答了自己的问题,但这可能不是一个好的长期解决方案。

例如:假设您想要门节点并且有100,000个其他节点。您将必须加载所有100,000并迭代它们以定位节点。这可能会超出设备的容量并导致用户体验不畅。

更好的答案是修复结构:

 {"monthYear": "08.2017":[
    {"referenzDatum": 2017-08-03},... },
    {"referenzDatum": 2017-08-02},... },
    {"referenzDatum": 2017-08-01},... },]},
 {"monthYear": "07.2017":[
    {"referenzDatum": 2017-07-03},... },
    {"referenzDatum": 2017-07-02},... }, ...]}

现在您可以简单地查询cars->项目节点的“门”,它将返回您想要的节点 - 无需迭代!

var oldDate: string;
var newDate: string;
sortedLogLine.entries = [];
this.sortedLog = [];

for (var i = 0; i < entries.length; i++) {
  newDate = entries[i].referenceDate.substring(0, 7).split('-').reverse().join('.');
  if (oldDate == newDate) {
    sortedLogLine.entries.push(entries[i]);
  }
  if (!oldDate) {
    sortedLogLine.entries.push(entries[i]);
    sortedLogLine.monthYear = newDate;
    oldDate = newDate;
  }
  if (oldDate != newDate) {

    pushSortedLogLine.entries = sortedLogLine.entries.slice(0);
    pushSortedLogLine.monthYear = oldDate;
    this.sortedLog.push(pushSortedLogLine);

    sortedLogLine.entries = [];
    sortedLogLine.entries.push(entries[i]);
    sortedLogLine.monthYear = newDate;
    oldDate = newDate;
  }
}
this.sortedLog.push(sortedLogLine);