2016-04-03 4 views
-2

Ich habe ein Objekt wie folgt:Probleme mit Iterieren über mein Objekt von Gegenständen

{ monday: { close: '10:30 PM', open: '07:30 AM' }, 
    tuesday: { close: '07:00 PM', open: '11:00 AM' }, 
    wednesday: { close: '05:30 AM', open: '11:00 AM' }, 
    thursday: { close: '11:00 PM', open: '06:00 AM' }, 
    friday: { close: '01:00 AM', open: '01:30 AM' }, 
    saturday: { close: '07:30 PM', open: '11:00 AM' }, 
    sunday: { close: 'Closed', open: 'Closed' } } 

Ich versuche, über diese zu durchlaufen und einen Array zu füllen.

// erhalten die Betriebsstunden

Space.getSpaceById(req.body.spaceId, function (error, space) { 

    if (error) 
     throw error; 

    var hours = space.hoursOfOperation; 

Object.keys(hours).forEach(function(key) { 
      console.log(hours[key]); 
      hoursArray.push({open: hours[key].open, closed: hours[key].close}) 
     }); 
} 

meine getSpaceById Methode ..

module.exports.getSpaceById = function (id, callback) { 
     Space.findOne({_id: id}, callback); 
    }; 

Ich halte einen Fehler bekommen, wenn .open Aufruf und .close

meine Stunden Objekt erklärt dies in mongoDB

hoursOfOperation: { 
     monday: {open: String, close: String}, 
     tuesday: {open: String, close: String}, 
     wednesday: {open: String, close: String}, 
     thursday: {open: String, close: String}, 
     friday: {open: String, close: String}, 
     saturday: {open: String, close: String}, 
     sunday: {open: String, close: String} 
    } 
+0

Konsole anmeldet, was? –

+0

Wenn ich den Code versuche, bekomme ich keinen Fehler. Was ist der genaue Fehler, den Sie bekommen? – Guffa

+0

'forEach' hat mehr Argumente zur Verfügung? Und wie genau "rufst du" auf und zu? – adeneo

Antwort

0

ich den Code in einem JSBin eingefügt, und ein paar Änderungen vorgenommen, das funktioniert gut, ohne sehr viel von Ihrem Code zu ändern:

var hours = { monday: { close: '10:30 PM', open: '07:30 AM' }, 
    tuesday: { close: '07:00 PM', open: '11:00 AM' }, 
    wednesday: { close: '05:30 AM', open: '11:00 AM' }, 
    thursday: { close: '11:00 PM', open: '06:00 AM' }, 
    friday: { close: '01:00 AM', open: '01:30 AM' }, 
    saturday: { close: '07:30 PM', open: '11:00 AM' }, 
    sunday: { close: 'Closed', open: 'Closed' } }; 

var hoursArray = []; 
Object.keys(hours).forEach(function(key) { 
      console.log(hours[key]); 
      hoursArray.push({open: hours[key].open, closed: hours[key].close}); 
     }); 
console.log('----HoursArray here:----'); 
console.log(hoursArray); 

JSBIN

+0

Ich bekomme immer noch den gleichen Fehler-TypeError: Kann nicht lesen Eigenschaft 'open' von undefined – unconditionalcoder

+0

Wenn ich Stunden deklariere, wie Sie oben tun, funktioniert es. Aber wenn ich die hoursOfOperation von meiner Datenbank auf Stunden einstelle, funktioniert es nicht.Selbst wenn Sie die hoursOfOperation in Ordnung bringen, rufen Sie uns an – unconditionalcoder

+0

{montag: {close: '10: 30 PM ', geöffnet: '07: 30 AM'}, Dienstag: {close: '07: 00 PM ', open: '11: 00 AM '}, Mittwoch: {close: '05: 30 AM', geöffnet: '11: 00 AM '}, Donnerstag: {close: '11: 00 PM', open: '06: 00 AM '} , Freitag: {Ende: '01: 00 Uhr ', geöffnet: '01: 30 Uhr'}, Samstag: {Ende: '07: 30 Uhr ', geöffnet: '11: 00 Uhr'}, Sonntag: {close: 'Closed', offen: 'Closed'}} – unconditionalcoder

0

Verwenden Sie einfach das for-in-Konstrukt.

for (var key in foo) { 
    if (foo.hasOwnProperty(key)) { 
     var hours = foo[key]; 
     console.log(hours.close + " " + hours.open); 
    } 
} 

Working JSFiddle