lodash отфильтровывает объекты с нулевым значением

У меня есть объект курсов, и я хочу отфильтровать его, проверив, имеет ли массив классов нулевое местоположение или нет. Однако, если в массиве классов есть хотя бы один объект, который не имеет нулевого местоположения, он должен быть возвращен. Вот пример объекта, над которым я работаю:

    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",
        }],
    }
]

и вот результат, который я ожидаю получить:

    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",
        }],
    }
]

Я просто не могу сосредоточиться на том, как фильтровать это из-за вложенной структуры объектов. Любая помощь будет принята с благодарностью!

2 ответа

Решение

Как насчет использования комбинации _.filter и _.every like:

_.filter(obj.courses, function(o) {
  return !_.every(o.classes,{ location: null });
});

https://jsfiddle.net/W4QfJ/1534/

Как насчет этого:

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/

Другие вопросы по тегам