我试图通过每个对象中的日期键过滤对象数组。
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
答案 0 :(得分: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'))
});
然后应该没问题。
答案 1 :(得分:2)
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);
}
}