如何将值从函数返回到其他函数

时间:2019-01-10 20:44:23

标签: javascript algorithm palindrome

我正在尝试检查数字是否为Java回文

我已经将数字转换为字符串,并将其取反并保存为新变量: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));

预期的输出应为true,例如,输入:121,输出:121

例如,如果输入:79,输出:97

,则预期输出应为false

4 个答案:

答案 0 :(得分:1)

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

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));

答案 1 :(得分:1)

您不需要两个功能。只需一个函数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);

答案 2 :(得分:1)

正如评论所建议的,这实际上可以归结为不向函数palindrome中传递值,然后不从中返回任何值。因此,这是一个快速修复:

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}将初始数字转换为字符串。

箭头语法只是标准功能的简写(尽管目前尚不存在其他差异)。

因为我们使用的方法采用一个数组,然后返回一个数组,所以我们可以将它们链接在一起以使代码简洁漂亮。

总结:

// 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('')

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

答案 3 :(得分:0)

可以做到

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));

您没有返回检查功能,并且功能范围有误。