【问题标题】:Substituting filter with reduce for counting objects within range用 reduce 代替过滤器来计算范围内的对象
【发布时间】:2020-08-05 02:59:29
【问题描述】:

我目前正在使用此逻辑来过滤掉某个日期范围内的对象数组,并获取该范围内对象的总数。

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,但是添加 startend 给我带来了一些问题。

【问题讨论】:

  • Reduce 将您之前返回的内容传递给下一次迭代,因此要么返回 prev+1 要么只返回 prev .reduce((a,b)=>a+withinRange(b),0)

标签: javascript ecmascript-6 reduce


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多