Lodash链式调用取值异常:返回空数组问题求助
解决Lodash链式调用返回空数组的问题
我一眼就看到你的Lodash链式调用里犯了个常见的小错误——你给每个链式方法都重复传入了$scope.meetings,这直接导致整个链的逻辑完全出错,最后返回空数组。
问题根源
Lodash的_.chain()已经把$scope.meetings包装成了链式操作的初始集合,后续的每个链式方法(比如orderBy、filter、forEach)都会自动用上一步操作的结果作为当前方法的处理对象,不需要再手动传入原数组。你额外传入的$scope.meetings会被当成方法的第一个参数(比如orderBy的迭代器参数),导致方法逻辑完全偏离预期。
修正后的代码
把每个方法里多余的$scope.meetings参数去掉就可以了:
let wrapper = _.chain($scope.meetings) .orderBy(function(o) { return new moment(o.meetingDate); }, ['asc']) .filter(function(o) { return moment(o.meetingDate).isAfter(begin) && moment(o.meetingDate).isBefore(end); }) .forEach(function(o) { o.createdBy = $scope.myData[0].fullName; }) .value();
额外检查点
如果修正后还是返回空数组,建议排查以下几点:
- 确认
begin和end是有效的moment对象,如果是字符串格式的日期,记得用moment(begin)、moment(end)转换后再进行比较。 - 检查
$scope.meetings本身是否为空数组,如果原集合就没有数据,结果自然是空的。 - 验证
o.meetingDate的格式是否能被moment正确解析,如果格式不匹配,moment会返回无效日期,导致isAfter/isBefore的判断逻辑失效。
内容的提问来源于stack exchange,提问作者IWI
相关产品推荐
相关产品推荐

