2016-03-20 5 views
3

Ich habe ein Kursobjekt und ich möchte es filtern, indem Sie überprüfen, ob es Klassen-Array hat einen Null-Speicherort oder nicht. Wenn das Klassenarray jedoch mindestens ein Objekt enthält, das keine Nullposition aufweist, sollte es zurückgegeben werden. Hier ist ein Beispiel-Objekt, das ich arbeite:lodash filter Objekte mit Null-Wert

courses: [ 
    { 
     title: "Introduction to English 101", 
     classes: [{ 
      location: null, 
      endDate: "2016-03-25T22:00:00.000Z", 
      startDate: "2016-03-23T22:00:00.000Z", 
     }] 
    }, 
    { 
     title: "Introduction to Japanese 101", 
     classes: [{ 
      location: { 
       city: "Paris", 
      }, 
      endDate: "2016-03-25T22:00:00.000Z", 
      startDate: "2016-03-23T22:00:00.000Z", 
     }] 
    }, 
    { 
     title: "Introduction to Spanish 101", 
     classes: [{ 
      location: null, 
      startDate: "2016-02-23T10:11:35.786Z", 
      endDate: "2016-02-23T12:11:35.786Z", 
     }, 
     { 
      location: { 
       city: "Montreal", 
      },    
      startDate: "2016-04-01T10:11:35.786Z", 
      endDate: "2016-04-15T10:11:35.786Z", 
     }], 
    } 
] 

und hier ist das Ergebnis, das ich zu bekommen erwarten:

courses: [ 
    { 
     title: "Introduction to Japanese 101", 
     classes: [{ 
      location: { 
       city: "Paris", 
      }, 
      endDate: "2016-03-25T22:00:00.000Z", 
      startDate: "2016-03-23T22:00:00.000Z", 
     }] 
    }, 
    { 
     title: "Introduction to Spanish 101", 
     classes: [{ 
      location: null, 
      startDate: "2016-02-23T10:11:35.786Z", 
      endDate: "2016-02-23T12:11:35.786Z", 
     }, 
     { 
      location: { 
       city: "Montreal", 
      },    
      startDate: "2016-04-01T10:11:35.786Z", 
      endDate: "2016-04-15T10:11:35.786Z", 
     }], 
    } 
] 

Ich kann einfach nicht meinen Geist herumgewickelt bekommen, wie diese aufgrund filtern, um die verschachtelte Struktur der Objekte. Jede Hilfe würde sehr geschätzt werden!

Antwort

1

Wie wäre es damit:

var data = { courses: [/* your sample data above */] }; 

var result = data.courses.filter(function(course){ 
    return course.classes && course.classes.some(function(course){ 
     return course && course.location !== null; 
    }); 
}); 

https://jsfiddle.net/oobxt82n/

+0

Dieser gibt nur die Stadt zurück: 'Paris', aber er sollte auch das Kursobjekt mit einer Klasse in der Stadt zurückgeben: 'Montreal'. – Alistair

+0

@Alistair Oh, falsch gelesen die Kriterien ein bisschen. Einfach geändert, aber – Johan

+0

Jetzt funktioniert es :) – Alistair