每次运行此代码时,即使输入是回文,也会导致“不是回文”。为什么会发生这种情况,如何让它显示正确的结果?
function palindrome(){
var input = document.getElementById("userInput").value;
var letterArray =[];
for(var i=0; i < input.length; i++){
letterArray.push(input[i]);
}
var backwardsArray =[];
for(var i = input.length-1; i >= 0; i--){
backwardsArray.push(input[i]);
}
if(letterArray === backwardsArray){
console.log(input + " is a palidrome");
}else{
console.log(input + " is not a palidrome");
}
console.log(letterArray);
console.log(backwardsArray);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input id="userInput"/>
<button id="submit" onClick="palindrome()">submit</button>
<div id="input"></div>
<script src="main.js"></script>
</body>
</html>
答案 0 :(得分:1)
只有当两个值实际上是相同的时,严格相等运算符(===
)才会返回true。 I would recommend reading this post to better understand how works ==
and ===
。
简而言之,在不同时间单独创建的两个不同的数组将始终是两个不同的数组(即使它们包含相同的值)。
var a = [];
var b = [];
var c = a;
console.log(a === b); // False.
console.log(a === c); // True.
&#13;
您需要检查第一个数组中的每个值是否与第二个数组中的值相对应。 这是一种方法:
function compareArray(array1, array2){
return (array1.length === array2.length) && array1.every(function(element, index) {
return element === array2[index];
});
}
function compareArray(array1, array2){
return (array1.length === array2.length) && array1.every(function(element, index) {
return element === array2[index];
});
}
console.log(compareArray([1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6])); // True.
console.log(compareArray([1, 2, 3, 4, 5, 6], [1, 2, 3])); // False.
&#13;
据说,有更短更有效的方法来检查回文。您不需要创建单个阵列:
function isPalindrome(str){
var n = str.length;
// You only need to iter on half of the string.
for(var i = 0; i < n / 2; i++){
if(str[i] !== str[n - i - 1]){
return false;
}
}
return true;
}
function isPalindrome(str){
var n = str.length;
for(var i = 0; i < n / 2; i++){
if(str[i] !== str[n - i - 1]){
return false;
}
}
return true;
}
function palindrome(){
var input = document.getElementById("userInput").value;
if(isPalindrome(input)){
console.log(input + " is a palidrome");
}else{
console.log(input + " is not a palidrome");
}
}
&#13;
<input id="userInput"/>
<button id="submit" onClick="palindrome()">submit</button>
<div id="input"></div>
&#13;
答案 1 :(得分:-1)
因为这不是你如何检查数组是否相等。试试这个条件:
if(letterArray.toString() == backwardsArray.toString()) {
//is palindrome
}
else{
//not palindrome
}
<强> 修改 强>
正如@Alexander O'Mara在评论中所提到的那样,为了避免误报你甚至可以这样做:
if(letterArray.join('') == backwardsArray.join('')) {
//is a palin
}
else {
//not a palin
}
注意 这不会进行类型检查。如果你想进行类型检查,请参阅@Anirudh Ramanathan评论