2016-06-20 18 views
4

Ich möchte die Abfrage basierend auf mehreren Werten bestellen. Das Problem ist, dass ich den Objektschlüssel type nicht auswählen kann, weil ich undefined bekomme, wenn ich dies tue.Firebase - Object.key gibt undefined zurück

var filterDataAccordingToDate = function(ref, startTime, endTime, travelType) { 

      ref.orderByChild('date') 
      .startAt(startTime).endAt(endTime) 
      .once('value', function(snapshot) { 
       var travel = snapshot.val(); 

       console.log("TRAVEL OBJ: " + util.inspect(travel, false, null)); 
       console.log("TRAVEL TYPE: " + travel.type); 

       if (travel.type == travelType) { 
        // DO STUFF 
       } 

      }); 
    } 

Die erste console.log() gibt das richtige Objekt:

TRAVEL OBJ: { 
    "-KKiZKAVH0-QulKnThhF" : { 
    "date" : 1466439009, 
    "dest" : 1, 
    "fbKey" : "-KKiZKAVH0-QulKnThhF", 
    "type" : 1 
    } 
} 

Die zweite: TRAVEL TYPE: undefined

Jede Idee, wo ich einen Fehler gemacht?

Antwort

2

Da Sie mehrere Objekte abrufen werden, müssen Sie über sie iterieren, um die Werte für jedes Objekt zu erhalten.

for (var key in travel) { 
     console.log("TRAVEL OBJ: " + util.inspect(travel[key], false, null)); 
     console.log("TRAVEL TYPE: " + travel[key].type); 
} 
+1

Aufgrund der Art von JavaScript Prototypen empfehle ich die 'snapshot.forEach()' Methode. –

3

Verwenden Sie die .forEach() Methode auf DataSnapshot

snapshot.forEach(function(snap) { 
    var key = snap.key; 
    if (key === travelType) { 
    // Do stuff 
    } 
}); 
Verwandte Themen