Javascript 带有扩展运算符的forEach返回未定义
我有一个这种类型的对象数组:Javascript 带有扩展运算符的forEach返回未定义,javascript,Javascript,我有一个这种类型的对象数组: [{id: "somethin%g", apple: "dfgdf efd"}, ...] 我想替换key=id值中的一些特殊字符,而不更改对象的任何其他内容 因此,上面的例子必须是: [{id: "something", apple: "dfgdf efd"}, ...] 我尝试此功能: function removeSpecialCharacters(metadata) { const result = metadata.forEach(datum =&
[{id: "somethin%g", apple: "dfgdf efd"}, ...]
我想替换key=id
值中的一些特殊字符,而不更改对象的任何其他内容
因此,上面的例子必须是:
[{id: "something", apple: "dfgdf efd"}, ...]
我尝试此功能:
function removeSpecialCharacters(metadata) {
const result = metadata.forEach(datum => {
const cleanId = datum.id.replace(/[.|&;$%@%"<>+]/g, '')
return { ...datum, id: cleanId }
})
console.log(result)
return result
}
函数删除特殊字符(元数据){
const result=metadata.forEach(数据=>{
const cleanId=datum.id.replace(/[.|&;$%@%“+]/g,”)
返回{…datum,id:cleanId}
})
console.log(结果)
返回结果
}
我得到
result=undefined
。为什么?你必须用map
替换forEach
。forEach
不返回数组。它只是运行循环的内容并丢弃结果。而map
将创建第二个数组并用映射的内容填充它
函数删除特殊字符(元数据){
const result=metadata.map(数据=>{
const cleanId=datum.id.replace(/[.|&;$%@%“+]/g,”)
返回{…datum,id:cleanId}
})
返回结果
}
const data=[{id:“somethin%g”,apple:“dfgdf efd”}];
日志(删除特殊字符(数据))代码>,因为forEach
的返回值是undefined
()。改用
此外,如果您的id
中只需要字母数字字符,您可以简单地使用以下正则表达式:\W+
\W+
匹配所有非字母数字字符。用空字符串替换它们
函数删除特殊字符(元数据){
const result=metadata.map(数据=>{
const cleanId=datum.id.replace(/\W+/g',)
返回{…datum,id:cleanId}
})
返回结果
}
const data=[{id:%g#中的someth+,apple:“dfgdf efd”},
{id:'some%@%'+#',苹果:“dfgdf efd}];
console.log(删除特殊字符(数据));