Javascript:如何删除数组

时间:2017-12-24 11:27:13

标签: javascript arrays string loops

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

我试图创建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);

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

4 个答案:

答案 0 :(得分:3)

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

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

但是你可以用正则表达式实现你想做的事情

&#13;
&#13;
    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)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

答案 3 :(得分:-1)

 const result = arrayA.map(item => {
   let replaced = "";
   for(const char of item)
     if(!arrayB.includes(char)) 
        replaced += char;
   return replaced;
});

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