Функция будет регистрировать значение, но вернет undefined - PullRequest
0 голосов
/ 03 августа 2020

Функция ниже регистрирует значение newData, но при вызове возвращает undefined. Кто-нибудь знает, почему это может быть? Также мы будем благодарны за любые отзывы о самой функции!

export const filterByDateTimeRange = (data=[{}], timeKey=[], startTime=moment(), stopTime=moment()) => {
  let newData = [];
  let i = 0;
  for(const item of data) {
    let time;
    let index = 0
    timeKey.map(key => {
      time ? time = time[key] : time = item[key];
      index++
      if(index === timeKey.length) {
        if(moment(time).isBetween(startTime, stopTime, undefined, '[)')) {
          newData.push(item)
        };
        i++;
        if(i === data.length) {
          console.log(newData);
          return (newData);
        }
      }
    })
  }
}

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Функция map обычно используется для преобразования коллекции и сохранения результатов, например:

var squares = [2, 3, 4].map(x => { return x * x });
// result is squares = [4, 9, 16]

Здесь больше подходит функция forEach, так как вы просто хотите l oop по массиву и не заботится о сохранении преобразования.

Затем, когда внешний l oop завершается, ваша функция может вернуть newData

export const filterByDateTimeRange = (data=[{}], timeKey=[], startTime=moment(), stopTime=moment()) => {
  let newData = [];
  let i = 0;
  for(const item of data) {
    let time;
    let index = 0
    timeKey.forEach(key => {                         //changed to a forEach loop
      time ? time = time[key] : time = item[key];
      index++
      if(index === timeKey.length) {
        if(moment(time).isBetween(startTime, stopTime, undefined, '[)')) {
          newData.push(item)
        };
        i++;
        if(i === data.length) {
          console.log(newData);
        }
      }
    });
  }
  return newData; //add the return after your loop finishes
}
0 голосов
/ 03 августа 2020

Это возврат внутри функции карты. Не возврат filterByDateTimeRange (). Если вы хотите вернуть newData. Заменить функцию карты на l oop.

Карта: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

...