【问题标题】:Remove All Instances of String in Array Javascript删除数组 Javascript 中的所有字符串实例
【发布时间】:2016-05-08 14:29:45
【问题描述】:

假设我有一个包含以下内容的数组:"@@@Some Text###","@@@More Text###","@@@Even more Text###","@@@Even Even More Text###"

我想删除@@@### 的所有实例。我尝试使用以下函数执行此操作,但返回的数组完全相同,如 fiddle 中所示:

function removeText(start, end, array) {
    var newArray = [];
    for (var i = 0; i < array.length; i++) {
        var text = array[i];
        text.split(start).join("");
        text.split(end).join("");
        newArray.push(text);
    }

    return newArray;
}

我认为有一些非常简单的原因我不能让它工作,所以任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我认为在这种情况下你应该更好地使用 Replace 而不是 Split,请参阅此处的实现:w3schools.com/jsref/jsref_replace.asp
  • 我假设你已经调试过了。逐行浏览您的代码。例如,越过test.split(start).join(""); 行后,检查变量test 并查看它的值。
  • 您的问题是“删除所有实例”。然而您的变量命名使用startend。您只想在开始和结束时删除它们,还是在任何地方删除它们?

标签: javascript arrays string text


【解决方案1】:

split 方法不会修改原始字符串,而是返回一个新值,因此请确保将其重新分配给文本,以便实际修改array[i] 实例:

text = text.split(start).join("");
text = text.split(end).join("");

这是你的updated fiddle

【讨论】:

  • 太好了,就是这样。谢谢! (我会尽快接受)
【解决方案2】:

给的怎么样:

var myArray = [
      "@@@Some Text###",
      "@@@More Text###",
      "@@@Even more Text###",
      "@@@Even Even More Text###"];

那么你可能

myArray = myArray.map(function(item){
    return item.replace("@@@", "").replace("###", "");
});

【讨论】:

  • 这将替换字符串中任何位置的@@@ and ###`。也许你会更好replace(/^@@@|###$/, '')
  • 好点,虽然 OP 声明:“我想删除所有 @@@ 和 ### 实例”但我同意,你的正则表达式可能是他们想要的
【解决方案3】:

在现代 JS 中:

function removeText(start, end, array) {
  let regexp = new Regexp(`^${start}|${end}$`, 'g');
  return array.map(elt => elt.replace(regexp, '');
}

在现实世界中,您可能希望转义 startend 以处理它们包含魔法正则表达式字符的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2018-08-22
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多