如何将函数中的 return 值转换为其他函数

How to return values from functions into other functions

我正在尝试检查 Javascript

中的数字是否为回文

我已经将一个数字转换为一个字符串,并将其反转并保存为一个新变量:reverseNum。但是,当我去检查 num == reverseNum 时,我似乎无法让逻辑正常工作

function palindrome() {
    function reverse(num) {
        num = num.toString();
        let reverseNum = [];
        for (let i = 1; i <= num.length; i++) {
            reverseNum.push(num[num.length - i]);

        }
        return reverseNum.join('');
    }

    function check(num, reverseNum) {
        //is palindrome
        if (num == reverseNum) {
            return true;
            //is not palindrome
        } else {
            return false;
        }
    }
}

console.log(palindrome(121));

如果输入:121,输出:121,预期输出应该为真

如果例如输入:79,输出:97,预期输出应该为 false

我创建了单独的函数。希望这对您有所帮助。

function reverse(num) {
    num = num.toString();
    var reverseNum = [];
    for (var i = 1; i <= num.length; i++) {
        reverseNum.push(num[num.length - i]);

    }
    return reverseNum.join('');
}

function palindrome(num) {
 var reverseNum = parseInt(reverse(num));

 console.log("Num:", num);
 console.log("Reverse Num:", reverseNum);
 
 if (num === reverseNum)
  return true;
    //is not palindrome
 else
  return false;
}

console.log(palindrome(121));

您不需要为此使用两个函数。只需一个函数 palindrome() 就足以检查回文。

  1. 将参数num转换为字符串。
  2. numString 分配给一个空字符串。
  3. num 字符串的每个字符推送到 numString 字符串。
  4. 检查新字符串 numString 是否与初始 num 字符串相同。

function palindrome(num) {
  num = num.toString();
  let reverseNum = "";
  for(i = 1; i <= num.length; i++) {
    reverseNum += num.charAt(num.length - i);
  }  
  
  if (num == reverseNum) {
    console.log(num + " is a Palindrome!!");
    return true;
  } else {
    console.log(num + " is not a Palindrome!!");
    return false;
  }
  
}

palindrome(224);
palindrome(424);
palindrome(222);
palindrome(363);

正如评论所暗示的那样,这实际上归结为不向函数 palindrome 传递值,然后不 return 从中获取任何值。因此,这是一个非常快速的修复:

function palindrome(number) {
    function reverse(num) {
        num = num.toString();
        let reverseNum = [];
        for (let i = 1; i <= num.length; i++) {
            reverseNum.push(num[num.length - i]);

        }
        return reverseNum.join('');
    }

    function check(num, reverseNum) {
        //is palindrome
        if (num == reverseNum) {
            return true;
            //is not palindrome
        } else {
            return false;
        }
    }
    
    return check(number, reverse(number))
}

console.log(palindrome(1211));

这可以用更少的代码完成,方法是将数字转换为数组,反转,然后检查它:

const palindrome = number => `${number}` === `${number}`
    .split('')
    .reverse()
    .join('')

console.log(palindrome(121))
console.log(palindrome(1211))


编辑 根据要求进一步解释。

我确实考虑过将其转换为标准函数以尝试使其更清晰一些,但我认为最好解释一下发生了什么。

${number} 只是将我们的数字转换为字符串。我们想这样做,以便我们可以更轻松地将其转换为数组。

我们想把它转成数组,因为数组有一个reverse方法,这正是我们需要的。所以,为了得到一个颠倒的数组,我们可以使用:

`${number}`
    .split('')
    .reverse()

所以现在我们有一个数组,它是我们数字的字符颠倒过来的。我们现在需要将其转化为可用于与原始数字进行比较的形式。为此,我们可以使用 join() 将其恢复为字符串。现在我们有一个初始数字的反转字符串。现在,我们只需要将其与初始数字进行比较,看看是否有回文。

由于将数字与字符串进行比较并不是很理想,因此我们需要转换其中之一。在我的示例中,我使用 ${number}.

将初始数字转换为字符串

箭头语法只是 shorthand 一个标准函数(尽管还有一些其他差异暂时不相关)。

因为我们使用的方法接受一个数组,return 一个数组,我们可以将它们链接在一起,使代码简洁明了。

总结:

// convert our numbers to strings
`${number}` === `${number}`

    // split the string into an array
    .split('')

    // reverse the array
    .reverse()

    // convert the array back to a string
    .join('')

如果您有任何具体问题,请告诉我!

这样就可以了

function palindrome(num) {


        num = num.toString();
        let reverseNum = [];
        for (let i = 1; i <= num.length; i++) {
            reverseNum.push(num[num.length - i]);

        }
        var e=reverseNum.join('')
        alert(e)
        return check(num,e);

    }

    function check(num, reverseNum) {

        //is palindrome
        if (num == reverseNum) {
            return true;
            //is not palindrome
        } else {
            return false;
        }

}

alert(palindrome(121));

您没有return检查功能,您的功能范围有误。