【问题标题】:Javascript: How to delete specific character values within strings within an arrayJavascript:如何删除数组中字符串中的特定字符值
【发布时间】:2018-06-06 05:01:30
【问题描述】:

我正在尝试从数组中的每个字符串中删除标点符号,但是如果尝试删除数组中字符串中的任何类型的字符,则会存在此问题。

我尝试创建 3 个循环: 第一个循环遍历我打算编辑的 arrayA 中的每个项目。 第二个循环遍历 arrayA 中每个字符串中的每个字符。 第三个循环检查arrayA中的字符是否匹配arrayB中的任何字符,如果匹配则删除。

但没有任何内容被删除,我不知道为什么。

这是我目前的代码:

let arrayA = ['abc', 'def', 'ghi'];
let arrayB = ['a', 'e', 'i', 'o', 'u'];

arrayA.forEach((item) => {
    for (let i=0; i < item.length; i++) {
        for (let arrayBIndex = 0; arrayBIndex < arrayB.length; arrayBIndex++) {
            item.replace(arrayB[arrayBIndex], '');
        };
    };
});
console.log(arrayA);

我已经搜索了与此相关的其他问题,但我无法找到任何答案,特别是要删除的元素包含在另一个列表中的位置。谢谢您的帮助。

【问题讨论】:

  • String.replace 不会修改原始字符串。您应该改用函数的返回值。

标签: javascript arrays string loops


【解决方案1】:

您可以使用arrayB 生成正则表达式,然后使用array#map 遍历arrayA 中的每个单词并使用string#replace 删除来自arrayB 的单词。

let arrayA = ['abc', 'def', 'ghi'],
    arrayB = ['a', 'e', 'i', 'o', 'u'],
    regExp = new RegExp(arrayB.join('|'), 'g'),
    result = arrayA.map(word => word.replace(regExp, ''));
    
console.log(result);

【讨论】:

  • 感谢您的回答,帮助很大。就像对任何使用标点符号的人的澄清一样。我发现在此解决方案中不一定只使用撇号表示标点符号作为字符串,因为句号('.')匹配任何字符。对于删除标点符号,arrayB = [',', '\\.', '"', '\'', '!', '-'] 因为这可以防止句号和撇号与其余部分发生意外行为代码。
【解决方案2】:

【讨论】:

    【解决方案3】:

    如果您希望使用数组,我建议您将字符串转换为字符数组并使用数组过滤运算符。

    但是,您可能可以使用正则表达式实现您想要做的事情

        const arrayA = ['abc', 'def', 'ghi'];
        const arrayB = ['a', 'e', 'i', 'o', 'u'];
        const result = arrayA
                          .map(s => [...s]) // array of chars
                          .map(chars => chars.filter(ch=>!arrayB.includes(ch)).join(''))//filter out invalid char and transform back into string
    
    console.log(result)

    【讨论】:

    • arrayA.map(item =&gt; [...item].filter(char =&gt; !arrayB.includes(char)).join(""))
    • 这只是一个偏好问题。在我看来,实际上将“加入”(来自我的答案的 sn-p)放在自己的地图中会更好(更容易看到“算法”-> map(toChar).filter(invalidChar).map(toString )
    【解决方案4】:
     const result = arrayA.map(item => {
       let replaced = "";
       for(const char of item)
         if(!arrayB.includes(char)) 
            replaced += char;
       return replaced;
    });
    

    字符串是不可变的。每个突变都会返回一个新字符串,而不是改变原始字符串。

    【讨论】:

      猜你喜欢
      • 2021-08-21
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多