如何在循环遍历数组项时移除名称中的下划线及指定后缀?
String.replace() 方法不会修改原字符串,而是返回替换后的新字符串,你的代码没有把替换结果重新赋值给name属性,所以修改不会生效。同时你当前的正则只匹配了_er,没有覆盖_bx的匹配逻辑。
方案1:删除字符串中下划线后面的所有内容
该方案会匹配第一个下划线到字符串末尾的所有内容并删除,不管下划线后是什么字符:
const newArr = nullValue.collection.map(item => { // 解构复制避免修改原数组中的对象,不需要修改原数据推荐用这种写法 return { ...item, name: item.name.replace(/_.*$/, '') } })
处理后结果:test_er变为test,test_bx变为test,fred保持原值不变。
方案2:仅删除指定的下划线后缀
该方案只会删除你明确指定的后缀,不会误删其他带下划线的内容:
如果需要同时删除_er和_bx后缀,正则写法如下:
const newArr = nullValue.collection.map(item => { return { ...item, // 括号内用|分隔你要删除的后缀,$标识匹配字符串末尾,避免匹配到中间的下划线内容 name: item.name.replace(/_(er|bx)$/, '') } })
如果只需要删除_er这一种后缀,修改正则即可:
const newArr = nullValue.collection.map(item => { return { ...item, name: item.name.replace(/_er$/, '') } })
如果不需要保留原数组数据,可以直接遍历修改原对象:
nullValue.collection.forEach(item => { item.name = item.name.replace(/_(er|bx)$/, '') })
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

