繁体   English   中英

删除 javascript 中字符串数组中的特殊字符

[英]remove special chars in array of strings in javascript

我想在js中循环一个字符串数组并通过删除来改变具有特殊字符的元素我可以用字符串但不能用字符串数组

 var names = ['created_at', 'placed-at', 'room-no']; console.log(names) names.forEach((element) => { element = element.replace(/[^a-zA-Z ]/, ' '); }); console.log(names) //however this regex work fine with independent strings like below var name= "created_at" name = name.replace(/[^a-zA-Z ]/, ' '); console.log(name)

数组是引用类型,但数组中的字符串是值类型。 由于您正在更新单个值类型的字符串,因此它不会更新原始数组。 您可以使用map function ,它将返回整个新数组。 或使用索引来改变当前数组的 foreach。

names.map((element) => element.replace(/[^a-zA-Z ]/, ' '));

或者

names.forEach((element, idx) => {
 names[idx] = element.replace(/[^a-zA-Z ]/, ' ');
});

forEach () 方法是一个循环,它为每个元素启动一个 function。 在您的问题中,您放置了一个箭头 function,但您也可以使用非箭头 function,如下所示:

names.forEach(myReplaceFunction)

按照您的问题,这将相当于:

function myReplaceFunction(element) {
 element = element.replace(/[^a-zA-Z ]/, ' ');
}

如您所见,它无法到达初始数组的任何元素(即使您使用术语元素)

幸运的是,forEach 方法发送了 3 个 arguments

  1. 被迭代元素的值(因为它是一个简单的类型,看看那里
  2. 他的食指
  3. 对所用数组的引用

因此,您必须将此 function 的代码更改为:

function myReplaceFunction(element, currentIndex, originArray) {
 originArray[currentIndex] = element.replace(/[^a-zA-Z ]/, ' ');
}

这简单地归结为

 var names = ['created_at', 'pla-ced-at', 'room-no']; names.forEach((el,i,arr) => { arr[i] = el.replace(/[^a-zA-Z ]/g, ' '); }); console.log(names)

小提示,您的正则表达式错误,它只允许您替换找到的第一个匹配项,我将其更改为: /[^a-zA-Z ]/g

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM