JavaScript日期比较:筛选大于指定日期元素返回空数组,求排查错误
解决JavaScript筛选大于指定日期元素返回空数组的问题
我来帮你排查下问题所在——你的filter函数返回空数组主要是两个小细节没注意到:
- 箭头函数缺少显式返回值:当箭头函数使用大括号
{}包裹代码块时,必须手动写return来返回结果,否则函数默认返回undefined。而filter只会保留返回值为true的元素,所有元素都被过滤掉,自然得到空数组。 - 不必要的重复创建日期对象:你在
filter的每次循环里都重新生成基准日期element,虽然这不会直接导致错误,但会造成不必要的性能开销,建议把它提到循环外面。
修正后的代码
var arr = ["2018-01-24T17:43:03.000Z","2018-01-25T17:43:03.000Z","2018-01-26T17:43:03.000Z","2018-01-27T17:43:03.000Z"] // 将基准日期提取到filter外部,避免重复实例化 var targetDate = new Date("2018-01-23T00:00:00.000Z"); var biggerThanElements = arr.filter(x => { const currentDate = new Date(x); // 显式返回比较结果 return currentDate > targetDate; }); console.log(biggerThanElements);
更简洁的写法
如果不需要额外的变量,可以去掉大括号,箭头函数会自动返回表达式的结果:
var arr = ["2018-01-24T17:43:03.000Z","2018-01-25T17:43:03.000Z","2018-01-26T17:43:03.000Z","2018-01-27T17:43:03.000Z"] var targetDate = new Date("2018-01-23T00:00:00.000Z"); var biggerThanElements = arr.filter(x => new Date(x) > targetDate); console.log(biggerThanElements);
运行上面的代码,就能得到所有大于指定日期的元素啦。
内容的提问来源于stack exchange,提问作者Zet
相关产品推荐
相关产品推荐

