javascript - Array.filter() 返回不同的结果
问题描述
所以,我的代码中有这个功能:
filterByWeek(data) {
// so just like with the days, here we want to get a limited amount of data (last 6 weeks or less);
const weeksAgo6 = moment().startOf('week').subtract(6, 'weeks').toDate();
console.log('data', data);
const filteredData = data.filter((item) => moment(item.date).isAfter(weeksAgo6));
console.log('filter test1', data.filter((item) => moment(item.date).isAfter(weeksAgo6)));
console.log('filter test2', filteredData);
return filteredData;
}
data 参数是一个数组,其对象如下所示:
{
date: "2019-07-21T14:03:37.759Z",
_id: "5d3b29e7e7e5db358c4ec482",
exercise: "5d35da3142c6445078cd03f2",
oneRM: 93
}
在这个数组中的所有对象中,我想过滤掉日期早于 6 周前的对象。我使用 Array.filter() 函数执行此操作。并且基于 console.logfilter test 1
它应该可以工作。但后来我尝试 console.logfilter test 2
并返回一个空数组。有人知道可能是什么原因造成的吗?
结果 console.log filter test 1
:我预期的结果
[{
"date": "2019-07-20T14:03:37.759Z",
"_id": "5d3b0876e7e5db358c4ec47b",
"exercise": "5d35da3142c6445078cd03f2",
"oneRM": 86
},
{
"date": "2019-07-21T14:03:37.759Z",
"_id": "5d3b29e7e7e5db358c4ec482",
"exercise": "5d35da3142c6445078cd03f2",
"oneRM": 93
},
{
"date": "2019-07-24T14:03:37.759Z",
"_id": "5d3b3896e7e5db358c4ec48b",
"exercise": "5d35da3142c6445078cd03f2",
"oneRM": 89
}]
结果 console.log filter test 2
:一个空数组,即使我认为我记录了同样的事情
解决方案
无法重现您的问题,两个 (test1 & test2)console.log
语句都记录相同的输出:
const data = [{
"date": "2019-07-20T14:03:37.759Z",
"_id": "5d3b0876e7e5db358c4ec47b",
"exercise": "5d35da3142c6445078cd03f2",
"oneRM": 86
},
{
"date": "2019-07-21T14:03:37.759Z",
"_id": "5d3b29e7e7e5db358c4ec482",
"exercise": "5d35da3142c6445078cd03f2",
"oneRM": 93
},
{
"date": "2019-07-24T14:03:37.759Z",
"_id": "5d3b3896e7e5db358c4ec48b",
"exercise": "5d35da3142c6445078cd03f2",
"oneRM": 89
}];
function filterByWeek(data) {
// so just like with the days, here we want to get a limited amount of data (last 6 weeks or less);
const weeksAgo6 = moment().startOf('week').subtract(6, 'weeks').toDate();
console.log('data', data);
const filteredData = data.filter((item) => moment(item.date).isAfter(weeksAgo6));
console.log('filter test1', data.filter((item) => moment(item.date).isAfter(weeksAgo6)));
console.log('filter test2', filteredData);
return filteredData;
};
filterByWeek(data);
<script src="https://cdn.jsdelivr.net/npm/moment@2.24.0/min/moment.min.js"></script>
推荐阅读
- python - 我如何在 Django 中显示我的评论回复
- java - 我们可以从接口内部引用一个类吗?
- jenkins - 在多分支管道上找不到“Jenkinsfile”
- javascript - 订阅 BehaviourSubject 时,如何避免在可观察对象内执行两次承诺?
- azure - Azure Scheduler 停用会影响具有 CRON 表达式的 webjob?
- snowflake-cloud-data-platform - 我应该如何加载其中包含注释和空格的 XML 文件,然后在根元素上使用 XMLGET,我无法获取子元素
- mysql - 派生表上的 MySQL Group Concat
- ssh - 通过 ssh 部署到 DigitalOcean 时如何在 Travis CI 中输入密码
- google-bigquery - 如何验证大型嵌套表的(未嵌套)行数?
- javascript - 如何测试从外部 API 获取数据的组件?