2015-02-17 3 views
1

Я пытаюсь отфильтровать массив объектов по ключу даты в каждом объекте.Использование Moment для сопоставления дат с фильтрами

for (var e = 0; e < arrayOfObjects.length; e++){ 
    var objects = arrayOfObjects[e]; 
    var sortDate = _.filter(objects, function(n) {moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days'))}); 
    console.log(sortDate); //console.log((moment(timeCreated).subtract(110, 'days'))); 
} 

Этот код возвращает пустой массив. Существует сочетание дат как до, так и после timeCreated - 110 дней. Я также консоль вошли каждая часть сравнения получать:

Moment {_isAMomentObject: true, _i: "2014-07-24", _f: "YYYY-MM-DD ", _isUTC: false, _pf: Object…}_d: Thu Jul 24 2014 00:00:00 GMT-0700 (PDT)_f: "YYYY-MM-DD "_i: "2014-07-24"_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto__: Moment 
dateCompare.controller.js:91 

Moment {_isAMomentObject: true, _i: Thu Feb 12 2015 20:22:41 GMT-0800 (PST), _isUTC: false, _pf: Object, _locale: Locale…}_d: Fri Nov 14 2014 20:22:41 GMT-0800 (PST)_i: Thu Feb 12 2015 20:22:41 GMT-0800 (PST)_isAMomentObject: true_isUTC: false_locale: Locale_pf: Object__proto__: Moment 

ответ

2

функция предиката вы передаете _.filter должна возвращать true, если значение должно быть включено, но ваш предикат:

function(n) {moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days'))} 

всегда возвращается undefined, потому что у него нет return. Функции JavaScript не имеют неявные значения возврата, вы должны быть четко:

function(n) { 
    return moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days')) 
// -^^^^^^ 
} 

Кроме того, вы пытаетесь _.filter один объект, а не массив. Внутри цикла у вас есть:

var objects = arrayOfObjects[e]; 

, а затем вы _.filter(objects, ...), которые не ничего полезного сделать.

Если включить return заявление и фильтровать массив:

_.filter(arrayOfObjects, function(n) { 
    return moment(n.date).isAfter(moment(timeCreated).subtract(110, 'days')) 
}); 

, то это должно быть хорошо.

Демо: http://jsfiddle.net/ambiguous/p7uab8uj/

+0

Я попробовал ваше предложение, но он не работает. underscore работает, поскольку прецеденты в этом JS-файле зависят от него. Moment также работает через console.log. Другие идеи? – rashadb

+0

Я получаю нефильтрованные результаты. Просто, чтобы пойти другим путем, _.result возвращает неопределенный. – rashadb

+0

У вас есть демо на jsfiddle.net или jsbin.com? –

1
for (var e = 0; e < arrayOfObjects.length; e++) { 
    var objects = arrayOfObjects[e]; 
    if (moment(objects.date).isAfter(moment(timeCreated).subtract(100, 'days'))) { 
     var goodDates = []; 
     goodDates.push(objects); 
     console.log(goodDates); 
    } 
} 
Смежные вопросы