在我的情况下,javascript总是返回false

时间:2017-06-10 05:46:49

标签: javascript

我正在为递归编写代码。这是我的代码。

在这里,我想要做的是,如果字符串有',那么用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("'", "&#39;");
  } else if (next == " ") {
    object = object.replace("'", "&rsquo;");
  } else if (prev == " ") {
    object = object.replace("'", "&lsquo;");
  } else {
    object = object.replace("'", "&rsquo;");
  }
  indexc = object.indexOf("'");
  if (indexc > -1) {
    replaceqt(object);
    return false;
  } else {
    return object;
  }
}

3 个答案:

答案 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("'", "&lsquo;");
  } else if (parseInt(prev) >= parseInt(0) && parseInt(prev) <= parseInt(9)) {
    object = object.replace("'", "&#39;");
  } else if (next == " ") {
    object = object.replace("'", "&rsquo;");
  } else if (prev == " ") {
    object = object.replace("'", "&lsquo;");
  } else {
    object = object.replace("'", "&rsquo;");
  }
  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
        ? '&lsquo;'
        : '&rsquo;'
      
      return (index === 0)
        ? str
        : quote + str
    })
    .join('')
}

console.log('Before:', someString)
console.log('After:', replaceQuotesFor(someString))

我停止使用for循环并修改索引,因为它使调试变得令人沮丧。

我希望这些功能有助于简化您的代码并在将来为您提供帮助!