用 reduce 代替过滤器来计算范围内的对象
Substituting filter with reduce for counting objects within range
我目前正在使用此逻辑过滤出日期范围内的对象数组,并获取该范围内对象的总数。
const extractInRange = function (range, payload) {
const start = new Date(range.startDate)
const end = new Date(range.endDate)
let dateRangeCount = 0
payload.filter(item => {
let date = new Date(item.createDate)
if (date >= start && date <= end) {
dateRangeCount++
}
})
return dateRangeCount
}
我想用 reduce 替换我的 filter 逻辑,但我不确定应该如何进行。
我确实知道如何在数组上使用 reduce 但是添加 start 和 end 会导致一些问题为了我。
您从 let dateRangeCount = 0
开始,您希望迭代有条件地递增该变量,所以让它成为您的累加器。在回调中,如果满足条件则添加到累加器:
const extractInRange = function(range, payload) {
const start = new Date(range.startDate);
const end = new Date(range.endDate);
return payload.reduce((dateRangeCount, item) => {
const date = new Date(item.createDate);
return dateRangeCount + (date >= start && date <= end);
}, 0);
}
在这里,dateRangeCount
将是一个数字,(date >= start && date <= end)
将是一个布尔值,因此如果条件在迭代中成功,它将 return dateRangeCount + 1
,否则它将 return dateRangeCount
。 return 值将是下一次迭代的新累加器(dateRangeCount
)。
我目前正在使用此逻辑过滤出日期范围内的对象数组,并获取该范围内对象的总数。
const extractInRange = function (range, payload) {
const start = new Date(range.startDate)
const end = new Date(range.endDate)
let dateRangeCount = 0
payload.filter(item => {
let date = new Date(item.createDate)
if (date >= start && date <= end) {
dateRangeCount++
}
})
return dateRangeCount
}
我想用 reduce 替换我的 filter 逻辑,但我不确定应该如何进行。
我确实知道如何在数组上使用 reduce 但是添加 start 和 end 会导致一些问题为了我。
您从 let dateRangeCount = 0
开始,您希望迭代有条件地递增该变量,所以让它成为您的累加器。在回调中,如果满足条件则添加到累加器:
const extractInRange = function(range, payload) {
const start = new Date(range.startDate);
const end = new Date(range.endDate);
return payload.reduce((dateRangeCount, item) => {
const date = new Date(item.createDate);
return dateRangeCount + (date >= start && date <= end);
}, 0);
}
在这里,dateRangeCount
将是一个数字,(date >= start && date <= end)
将是一个布尔值,因此如果条件在迭代中成功,它将 return dateRangeCount + 1
,否则它将 return dateRangeCount
。 return 值将是下一次迭代的新累加器(dateRangeCount
)。