使用拆分和反向逻辑理解回文代码

时间:2016-03-03 22:25:23

标签: javascript

我正在尝试编写回文代码,因此我使用的是splitreverse方法。我的逻辑是否正确?我可以直接使用reverse方法而不是split然后reverse吗?

如果我给==它会打印回文,好像我给===它打印的不是回文。我是JS的初学者,我正在努力学习。

var actualWord = "madam"
var splittedWord = actualWord.split();

console.log("splittedWord---->" + splittedWord);

var reversedWord = splittedWord.reverse();

console.log("reversedWord---->" + reversedWord);
console.log("boolean" + reversedWord === actualWord);

if (reversedWord === actualWord) {
  console.log("palindrome");
} else {
  console.log("not palindrome")
}

4 个答案:

答案 0 :(得分:1)

您的逻辑存在缺陷split(),没有要拆分的参数会返回原始单词,这意味着reverse()无效,因为您正在处理单个元素数组。您还试图检查数组是否相等,这是行不通的。

要执行您需要的操作,您需要按''分割以生成一个字符数组,然后您可以reverse()join()一起反转该字的字符。然后你可以比较这些词来发现原作是否是回文。试试这个:

var actualWord = "madam"
var reverseWord = actualWord.split('').reverse().join('');    
console.log(actualWord, reverseWord);

if (actualWord === reverseWord) {
    console.log(actualWord + " IS a palindrome");
} else {
    console.log(actualWord + " IS NOT a palindrome")
}

Working example

更进一步,您可以将逻辑提取到它自己的函数,并使字符串比较不区分大小写:

console.log('madam', isPalindrome('madam'));
console.log('madame', isPalindrome('madame'));
console.log('raceCAR', isPalindrome('raceCAR'));

function isPalindrome(word) {
    var reverseWord = word.split('').reverse().join('');
    return word.toLowerCase() === reverseWord.toLowerCase();
}

Example fiddle

答案 1 :(得分:0)

使您的代码更正的几件事:

  • 使用.split("")而非.split()
  • 拆分字词
  • 使用.join("")
  • 从数组创建字符串
  • 将括号放在比较器的“布尔”行中,否则“+”将在“===”之前执行

var actualWord = "madam";
var splittedWord = actualWord.split("");
log("splittedWord---->" + splittedWord.join(""));
var reversedWord = splittedWord.reverse();
log("reversedWord---->" + reversedWord.join(""));
log("boolean---->" + (reversedWord.join("") === actualWord));
if (reversedWord.join("") === actualWord) {
  log("palindrome");
} else {
  log("not palindrome")
}

function log(str) {
  document.body.appendChild(document.createElement("p")).innerHTML = str;
}

答案 2 :(得分:0)

  

在执行任何必要操作后,==运算符将比较相等性   类型转换。 ===运算符不会进行转换,所以如果   两个值不是同一类型===只会返回false。它的   这种情况下===会更快,并可能返回不同的结果   比==。在所有其他情况下,表现将是相同的。

例如 -

"1" == 1
true
"1" === 1
false

在您的情况下,reversedWord是一个数组,但actualWord是字符串,因此在使用false时获得===,但是当您使用== JS时为您做必要的类型转换,然后获得true

答案 3 :(得分:0)

你必须在反向函数之前调用split函数,因为你指的是字符串而不是数组。