Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中删除字符串数组中的特殊字符_Javascript_Arrays_Regex_String - Fatal编程技术网

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

在javascript中删除字符串数组中的特殊字符,javascript,arrays,regex,string,Javascript,Arrays,Regex,String,我想在js中循环一个字符串数组,并通过删除具有特殊字符的元素来改变该元素。我可以使用字符串,但不能使用字符串数组 var name=['created_at','place at','room no'; console.log(名称) name.forEach((元素)=>{ 元素=元素。替换(/[^a-zA-Z]/,“”); }); console.log(名称) //但是,这个正则表达式可以很好地处理独立字符串,如下所示 var name=“在创建时创建” 名称=名称。替换(/[^a-zA

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

var name=['created_at','place at','room no';
console.log(名称)
name.forEach((元素)=>{
元素=元素。替换(/[^a-zA-Z]/,“”);
});
console.log(名称)
//但是,这个正则表达式可以很好地处理独立字符串,如下所示
var name=“在创建时创建”
名称=名称。替换(/[^a-zA-Z]/,“”);

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

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

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

names.forEach(myReplaceFunction)
根据您的问题,这相当于:

函数myReplaceFunction(元素){
元素=元素。替换(/[^a-zA-Z]/,“”);
}
正如您所看到的,它不能到达初始数组的任何元素(即使使用术语element)

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

  • 迭代元素的值(因为它是一个简单类型)
  • 他的食指
  • 对所用数组的引用
  • 因此,必须将此函数的代码更改为:

    函数myReplaceFunction(元素、当前索引、原始数组){
    originArray[currentIndex]=元素。替换(/[^a-zA-Z]/,“”);
    }
    
    这可以简单地归结为

    var name=['created_at','pla ced at','room no';
    name.forEach((el,i,arr)=>{
    arr[i]=标高替换(/[^a-zA-Z]/g');
    });
    
    console.log(names)
    您可能正在寻找一个
    map
    而不是一个
    forEach
    让我尝试使用map。请注意,您应该捕获mapsure的返回,注意这里可能有
    names[i]=element.replace(/[^a-zA-Z]/,'')?但是
    map
    是更好的解决方案。“正如您所看到的,它不能到达初始数组的任何元素”-这只适用于基本体,它已经运行了。@Andreas。。。这是真的,我错过了,但因为它需要更长的解释,我放了一个很好的(?)链接…)
    names.forEach((element, idx) => {
     names[idx] = element.replace(/[^a-zA-Z ]/, ' ');
    });