[英]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
因此,您必须将此 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.