我正在为递归编写代码。这是我的代码。
在这里,我想要做的是,如果字符串有'
,那么用HTML引号替换它并递归调用函数,直到所有'
都被替换。
但这总是让我失意。当我提醒var a
时。如果我不使用return false
,则返回undefined。有什么问题在这里有什么不对吗?
var a = replaceqt(" hello's there 'how are you?' ");
console.log(a);
function replaceqt(object) {
var indexc = object.indexOf("'");
var next = object.charAt(indexc + 1);
var prev = object.charAt(indexc - 1);
if (indexc == 0) {
object = object.replace("'", "‘");
} else if (parseInt(prev) >= parseInt(0) && parseInt(prev) <= parseInt(9)) {
object = object.replace("'", "'");
} else if (next == " ") {
object = object.replace("'", "’");
} else if (prev == " ") {
object = object.replace("'", "‘");
} else {
object = object.replace("'", "’");
}
indexc = object.indexOf("'");
if (indexc > -1) {
replaceqt(object);
return false;
} else {
return object;
}
}
答案 0 :(得分:2)
因为只要有第二次通话你就会返回false。应该返回递归调用的结果。
var a = replaceqt(" hello's there 'how are you?' ");
console.log(a);
function replaceqt(object) {
var indexc = object.indexOf("'");
var next = object.charAt(indexc + 1);
var prev = object.charAt(indexc - 1);
if (indexc == 0) {
object = object.replace("'", "‘");
} else if (parseInt(prev) >= parseInt(0) && parseInt(prev) <= parseInt(9)) {
object = object.replace("'", "'");
} else if (next == " ") {
object = object.replace("'", "’");
} else if (prev == " ") {
object = object.replace("'", "‘");
} else {
object = object.replace("'", "’");
}
indexc = object.indexOf("'");
if (indexc <= -1) {
return object;
}
return replaceqt(object);
}
顺便说一句,如果parseInt(num)
是num
说0或9,则您不需要number
。
答案 1 :(得分:1)
您需要替换
if (indexc <= -1){
return object;
}else{
replaceqt(object); return false;
}
与
if (indexc <= -1){
return object;
}else{
return replaceqt(object);
}
在原始代码中,replaceqt(object)
时会丢弃indexc >= 0
的返回值。
答案 2 :(得分:1)
您应该尝试使用.split
和.join
函数来简化代码。
对于简单的 find-replace all ,您可以执行以下操作:
var sentence = "I hate spaces."
var charToFind = " ";
var replacement = "-";
var afterSplit = sentence.split(charToFind) // ["I", "hate", "spaces"]
var result = afterSplit.join(replacement) // "I-hate-spaces"
您的示例比查找替换更复杂,因为您需要跟踪左右引号。
为了解决这个问题,我们可以使用数组中的索引来判断它是偶数还是奇数。
var someString = "My 'name' is 'Ryan'... I 'think'."
function replaceQuotesFor (str) {
return str
.split("'")
.map(function (str, index) {
var quote = index % 2 === 1
? '‘'
: '’'
return (index === 0)
? str
: quote + str
})
.join('')
}
console.log('Before:', someString)
console.log('After:', replaceQuotesFor(someString))
我停止使用for
循环并修改索引,因为它使调试变得令人沮丧。
我希望这些功能有助于简化您的代码并在将来为您提供帮助!