我正在尝试从数组中的每个字符串中删除标点符号,但是在尝试删除数组中字符串中的任何类型的字符时会存在此问题。
我试图创建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);
我已经搜索了其他有关此问题的问题,但我还没有找到任何答案,特别是要删除的元素包含在另一个列表中。谢谢您的帮助。
答案 0 :(得分:3)
您可以使用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);
&#13;
答案 1 :(得分:1)
如果您希望使用数组,我建议将字符串转换为字符数组并使用数组过滤器运算符。
但是你可以用正则表达式实现你想做的事情
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;
答案 2 :(得分:1)
使用Array.prototype.splice()
,看一下:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
答案 3 :(得分:-1)
const result = arrayA.map(item => {
let replaced = "";
for(const char of item)
if(!arrayB.includes(char))
replaced += char;
return replaced;
});
字符串是不可变的。每个突变都会返回一个新字符串,而不是改变原始字符串。