【问题标题】:remove special chars in array of strings in javascript删除javascript中字符串数组中的特殊字符
【发布时间】:2021-08-21 13:19:27
【问题描述】:

我想在 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 而不是forEach
  • 让我用地图试试
  • 请注意,您应该捕获地图的返回
  • 当然,在此注明
  • 可能是names[i] = element.replace(/[^a-zA-Z ]/, ' ');?但是map 是更好的解决方案。

标签: javascript arrays regex string


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    names.forEach(myReplaceFunction)
    

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

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

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

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

    1. 被迭代元素的值(因为是简单类型have a look there
    2. 他的食指
    3. 对所用数组的引用

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

    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

    【讨论】:

    • “如您所见,它无法到达初始数组的任何元素” - 这仅适用于原语,OP 已经 observed
    • @Andreas ...这是真的,我错过了,但由于需要更长的解释,我放了一个好的(?)链接...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多