Есть ли лучший способ проверить n функций с помощью Reduce? [JS] - PullRequest
0 голосов
/ 15 января 2020

Я сделал простую функцию для проверки (вызова) числа аргументов (функций) 'n' и возврата результата в виде массива, но я не уверен, является ли это правильным способом использования Reduce (проверьте строку с комментариями ниже) .

const sucess = () => true;
const failed = () => false;


const tester = (...args) => {
 return [...args].reduce((acc,currentValue) => { 
    if(typeof acc === 'function') // this is right?
        return [acc(),currentValue()]
    return [...acc,currentValue()]
  });
}

console.log(tester(sucess,failed,failed,sucess));

что ты

1 Ответ

5 голосов
/ 15 января 2020

Похоже, вы пытаетесь учесть первую итерацию, где acc будет первым элементом массива.

К счастью, reduce уже имеет способ объяснить это. В MDN последний аргумент - это initialValue, с которого acc будет начинаться. Только когда не указан initialValue, функция acc станет функцией. В вашем случае вы можете передать пустой массив [] так:

const sucess = () => true;
const failed = () => false;


const tester = (...args) => {
  return [...args].reduce((acc,currentValue) => ([...acc,currentValue()]), []);
}

console.log(tester(sucess,failed,failed,sucess));

Это делает логику c очень простой, поскольку вы гарантированно, что acc - это всегда массив и ничего больше.

В качестве отступления Как указано в комментариях, вы делаете преобразование массива некоторых значений с отображением в массив других значений. Это точный вариант использования Array.map(). Вышесказанное может быть выполнено более кратко, как это:

const sucess = () => true;
const failed = () => false;


const tester = (...args) => args.map(fn => fn());

console.log(tester(sucess,failed,failed,sucess));
...