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