Задача автоматизации приращения функции JavaScript - PullRequest
0 голосов
/ 22 мая 2019

Ниже приведена моя функция, переменная dotkoy: iterator.format('DD-MM-YYYY') == props.activity[0] || iterator.format('DD-MM-YYYY') == props.activity[2] Мне это не нравится, props.activity - это массив. Я хочу, чтобы props.activity автоматически увеличивал длину массива, и я хотел бы проверить iterator.format('DD-MM-YYYY') == props.activity[0]...props.activity[props.acticity.length], чтобы суммировать массив props.activityдаты в Я хочу проверить даты по одной с помощью его iterator.format ('DD-MM-YYYY') в дополнение время и постоянную функцию, как время загрузки и постоянный метод.Спасибо за любой совет

Calculate = (props) => {

  const constant = x => () => x;
  const times = (n, iterator) => {
    let accum = Array(Math.max(0, n));
    for (let i = 0; i < n; i++) accum[i] = iterator.call();
    return accum;
  };
  let result = [];
  const currentMonth = props.focus.month();
  let iterator = moment(props.focus);
  let i = 0;
  let h = 0;
  let control = []
  while (iterator.month() === currentMonth) {
    if (iterator.weekday() === 0 || result.length === 0) {
      result.push(times(7, constant({})));
    }
    let week = result[result.length - 1];
    week[iterator.weekday()] = {
      date: iterator.date(),
      dotkoy: iterator.format('DD-MM-YYYY') == props.activity[0] || iterator.format('DD-MM-YYYY') == props.activity[2],
      selected: props.selected && iterator.isSame(props.selected, 'day'),
      today: iterator.isSame(moment(), 'day'),
      haftasonumu: iterator.format('ddd') == "Cts" || iterator.format('ddd') == "Paz",
    };
    iterator.add(1, 'day');
  }
  return result;
};

1 Ответ

2 голосов
/ 22 мая 2019

Просто используйте Array#some. Это будет проверять каждого члена массива на обратный вызов, который вы даете, и возвращает true, если хотя бы один член прошел проверку, или false, если ни один из них не делает:

dotkoy: props.activity.some(activity => iterator.format('DD-MM-YYYY') == activity)

Если вы хотите избежать линейного сканирования на каждой итерации, вы можете предварительно рассчитать поиск для всех членов prop.activity и проверить это. Самым простым вариантом в этом случае является Set:

const lookupDates = new Set(props.activity);

/* ... */

dotkoy: lookupDates.has(iterator.format('DD-MM-YYYY')), 
...