我目前正在使用此逻辑来筛选出日期范围内的对象数组,并获取该范围内的对象总数。

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代替我的过滤器逻辑,我不确定应该如何进行。
我确实知道如何在数组上使用reduce,但是开始和结束的添加给我带来了一些问题。

最佳答案

您从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)将是一个布尔值,因此,如果条件在一次迭代中成功完成,它将返回dateRangeCount + 1,否则将返回dateRangeCount。返回值将是下一次迭代的新累加器(dateRangeCount)。

09-17 15:58