【问题标题】:Iteration through string and remove all instances of遍历字符串并删除所有实例
【发布时间】:2018-08-22 04:14:12
【问题描述】:

我的指示是遍历一个字符串并删除字母“a”的所有实例。我认为找到示例很容易,但我无法做到。有些人会在没有迭代的情况下删除该字母,但这不是说明所要求的。如果有人可以查看我的代码并协助我完成任务,我将不胜感激! “removeA”函数现在将遍历字符串,并且只有控制台记录!==“a”,但对于我来说,我无法弄清楚如何将它保存到新字符串中。提前致谢。

removeA = function(stringWithA) {
    if (stringWithA === null || typeof (stringWithA) !== "string" || stringWithA === "") {  //Checking for is null AND is not array
        return 'Please enter a valid string';
    } else {
        lowerWithA = stringWithA.toLowerCase();
        for (var i = 0; i < lowerWithA.length; i++) {
            if (lowerWithA.charAt(i) !== "a") {
                console.log(lowerWithA.charAt(i));
            }
        }
    }
}

【问题讨论】:

  • 所以,除了指出你没有在你的逻辑中的任何地方进行删除之外,我会给你的一个指针,因为这是家庭作业,你应该从头到尾迭代.
  • @Taplar - 就地移除的好建议。这也可以通过创建一个由除不需要的字符之外的所有字符组成的新字符串来完成。
  • @Bucket 没有使用字符串“就地”删除这样的东西。字符串是不可变的,你永远不能对字符串进行“就地”操作。
  • @ScottMarcus。你说得对。当我仔细考虑时,我失去了 javascript 上下文。但是,如果将字符串转换为字符数组,则可以就地删除。

标签: javascript jquery string iteration charat


【解决方案1】:

您可以将字母存储到一个数组中。

var removeA = function(stringWithA) {

  if (stringWithA === null || typeof(stringWithA) !== "string" || stringWithA === "") { //Checking for is null AND is not array
    return 'Please enter a valid string';
  } else {
    var newString = [];
    lowerWithA = stringWithA.toLowerCase();
    for (var i = 0; i < lowerWithA.length; i++) {
      if (lowerWithA.charAt(i) !== "a") {
        newString.push(lowerWithA.charAt(i))
      }
    }
    
    return newString.join('');
  }
}

console.log(removeA("Eleazar"))

或者,只需使用regex

var removeA = function(stringWithA) {
  if (stringWithA === null || typeof(stringWithA) !== "string" || stringWithA === "") { //Checking for is null AND is not array
    return 'Please enter a valid string';
  } else {
    return stringWithA.replace(/a/gi, '')
  }
}

console.log(removeA("EleaaaaazAreeeeaaaElAAAAAeaaaEleEvene"))

【讨论】:

    【解决方案2】:

    为什么不用所有不是a 的字符构建一个新字符串?

    var newString = "";
    
    for (var i = 0; i < lowerWithA.length; i++) {
        var letter = lowerWithA.charAt(i);
        if (letter !== "a") {
            newString += letter;
        }
    }
    
    console.log(newString);
    

    如果您想将其扩展为不区分大小写:

    ...
    if (letter !== 'a' || letter !== 'A') { ... }
    

    而且根本不要在原始字符串上调用String.toLowerCase()

    【讨论】:

      【解决方案3】:

      我想已经有你需要的函数了,replace

      var stringWithA = 'A aaaa bbbcc!';
      alert(stringWithA.replace(/[Aa]/g, ''));

      【讨论】:

      • OP 说他看到了不涉及迭代的解决方案,这是不可接受的,因为分配是使用迭代。
      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 2015-05-29
      • 2012-01-13
      • 2014-08-05
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多