通过多个函数运行一个值 (Javascript)

Ben*_*ers 0 javascript function palindrome

我想创建一个函数“palindromes()”,它检查一个值是否是回文(向前和向后拼写相同)。为了做到这一点,我创建了 4 个函数,其中:

  1. 使所有字母变小
  2. 删除所有非字母字符
  3. 反转随后的数组,最后......
  4. 检查该数组是否是回文。

参见下面的函数:

  function makeSmall(input) {
    lowerCase = input.toLowerCase();
    return lowerCase;
  }

  function keepOnlyLetters(input) {
    var patt1 = /[a-z]/g;
    var onlyLetters = input.match(patt1);
    return onlyLetters;
  }

  function reverseArray(array) {
    var reversedArray = array.slice().reverse();
    return reversedArray;
  }

  function checkPalindromes(array) {
    var reversedArray = array.slice().reverse();
    for (let i = 0; i <= array.length; i++) {
      if (array[i] != reversedArray[i]) {
        return false;
      }
    }
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

如何确保函数“palindromes()”采用一个值并通过所有这些函数运行它,最终给出该值是否是回文的答案(真或假)?

最好的问候,贝尼

Mar*_*yer 5

函数存在收益递减点。当调用函数与内联使用函数体一样短时,您可能已经达到了这一点。例如,makeSmall(input)仅使用内联实际上没有任何改进input.toLowerCase(),并且会更慢且更难以理解。input.toLowerCase()已经是一个函数;将其包装在另一个函数中只是浪费工作。

话虽如此,为了回答您的问题,由于所有函数都返回输入到下一个函数的值,因此您可以将函数放入数组中并调用reduce()

function palindromes(input) {
    return [makeSmall, keepOnlyLetters, reverseArray, checkPalindromes].reduce((a, c) => c(a), input)
}
Run Code Online (Sandbox Code Playgroud)