【问题标题】:Removing an element with splice getting error删除带有拼接错误的元素
【发布时间】:2021-08-26 02:50:07
【问题描述】:

我正在练习解决 Codewars 中的问题。 我有一个问题要求删除一个字符,如果它包含在一个字符串中。在我的情况下,角色是'!'。 我的代码是:

function removeExclamationMarks(s) {
  let mark = '!';
  console.log(s);
  let removeElement = s.indexOf(mark);
  console.log(removeElement)
  let getRid = s.splice(removeElement,1)
  return getRid;
}
console.log(removeExclamationMarks('Hello!'))

在 let getRid = s.splice(removeElement,1) 之前的一切都有效。 我的工作流程如下

  • 我在变量中设置了我要查找的元素
  • 我检查字符串
  • 我在字符串中找到了标记出现的地方
  • 我查了号码
  • 我做拼接 - 这会破坏代码。

有什么建议吗?

【问题讨论】:

  • 字符串不是数组,字符串没有splice 方法(因为字符串是不可变的)。一个快速而肮脏的解决方法是在拼接之前将s 转换为数组。
  • 拼接需要一个数组see here
  • 您需要始终替换单个单词?
  • 有什么具体原因,为什么你不使用简单的String.replace 方法?

标签: javascript splice


【解决方案1】:

您首先需要检查它存在的位置,然后才执行拼接操作。

function removeExclamationMarks(s) {
  let mark = '!';
  return s.replaceAll(mark, '');
}
console.log(removeExclamationMarks('Hello!'))

【讨论】:

  • 字符串有拼接方法
  • @Teemu - 感谢您澄清更新的答案。我对数组和字符串感到困惑
  • 嗨@murli2308 考虑使用<> 工具来创建您的答案
【解决方案2】:

该方法仅在 OP 情况下有效,例如使用String.replace

function removeExclamationMarks(s) {
  let mark = '!';
  let removeElement = s.indexOf(mark);
  if (removeElement > -1) {
    s.splice(removeElement, 1)
  }
  return s.join('');
}
console.log(removeExclamationMarks('Hello!'.split('')));

我做了什么?

  • split 字符串入数组
  • 使用indexOf检查标记的索引,然后检查是否不是-1(不存在)
  • splice 元素并返回 join('') 版本的数组

String.replace 为例

console.log('Hello!'.replace('!', ''));

【讨论】:

    【解决方案3】:

    如果您在字符串数据类型上使用拼接,那么这是错误的,我看不出您的代码有任何问题,除了缺少一行,即首先将您的字符串转换为数组,如下所示:

    const strArr = [...s];
    

    然后对这个strArr 使用拼接,你的代码就可以正常工作了。

    注意:如果要返回更新后的字符串,请将返回值更改为 strArr.join('')

    【讨论】:

    • 你先测试过他的代码吗? getRid 总是返回 ! 而不是 Hello,所以是错误的。
    • 阅读我在答案中已经提到的注释部分,我已经知道 getRid 会返回什么,这就是我在答案中写注释部分的原因。
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 2021-06-14
    • 2010-10-04
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2023-01-23
    • 2017-04-29
    相关资源
    最近更新 更多