Подставляющий фильтр с уменьшением для подсчета объектов в пределах диапазона - PullRequest
0 голосов
/ 22 апреля 2020

В настоящее время я использую эту логику c, чтобы отфильтровать массив объектов в диапазоне дат и получить общее количество объектов в этом диапазоне.

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
} 

Я хочу заменить мой фильтр logi c на уменьшение специально, и я не уверен, как мне поступить.
Я знаю, как использовать уменьшение для массивов, но добавление start и end вызывает у меня некоторые проблемы.

1 Ответ

1 голос
/ 22 апреля 2020

Вы начинаете с 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) для следующей итерации.

...