gpt4 book ai didi

javascript - 回文检查器 - for 循环的问题

转载 作者:行者123 更新时间:2023-12-03 00:08:04 25 4
gpt4 key购买 nike

我正在学习javaScript并编写一个回文检查器来练习。它不起作用,通过使用 print 语句,我将问题范围缩小到了 for 循环的问题。我不明白为什么它不起作用;有人能阐明一下吗?

function palindrome(str) {
var newString = str.replace(/[^a-z0-9]/g, '').toLowerCase();
console.log(newString)
var forwardsArray = newString.split("");
console.log(forwardsArray)
var backwardsArray = forwardsArray.reverse();
console.log(backwardsArray)
for (var i = 0; i < backwardsArray.length; i++) {
for (var j = 0; j < forwardsArray.length; j++) {
console.log(backwardsArray[i])
console.log(forwardsArray[i])
if (forwardsArray[j] !== backwardsArray[i]) {
return false;
}
}
return true;
}
}

最佳答案

我同意其他评论者的观点,即有 better ways to find palindromes ,但我认为这是一个很好的学习机会,因为您的代码中有一个常见的初学者陷阱,您可能会从了解它中受益。

最大的问题当然是你的for循环检查backwardsArray的每个项目是否等于forwardsArray的每个项目,除非你的单词只包含所有相似的字符,否则这不会是真的。

实际上,您只想检查前向数组中的字符是否与后向数组中同一索引处的字符相同,因此您只需要一个 for 循环。

但一个不太明显的问题是 Array.reverse “就地”反转数组。这意味着当您调用reverse而不是返回新副本时,forwardsArray会被修改,因此backwardsArray和forwardsArray引用完全相同的数组。

您应该在此处克隆数组。一种流行的方法就是使用 Array.slice

function palindrome(str) {

var newString = str.replace(/[^a-z0-9]/g, '').toLowerCase();

var forwardsArray = newString.split("");
// Copy the array
var backwardsArray = forwardsArray.slice().reverse();

for (var i = 0; i < backwardsArray.length; i++) {
var backwardChar = backwardsArray[i]
var forewardChar = forwardsArray[i]
if(backwardChar !== forewardChar){
return false
}
}
return true;
}

console.log(palindrome("racecar")) // true

console.log(palindrome("ralecar")) // false

关于javascript - 回文检查器 - for 循环的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com