javascript - 带有扩展运算符的 forEach 返回未定义
问题描述
我有一个这种类型的对象数组:
[{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
}
我明白了result = undefined
。为什么?
解决方案
您必须将 替换forEach
为map
。forEach
不返回数组。它只是运行循环的内容并丢弃结果。而map
将创建第二个数组并用映射的内容填充它。
function removeSpecialCharacters(metadata) {
const result = metadata.map(datum => {
const cleanId = datum.id.replace(/[.|&;$%@%"<>+]/g, '')
return { ...datum, id: cleanId }
})
return result
}
const data = [{id: "somethin%g", apple: "dfgdf efd"}];
console.log(removeSpecialCharacters(data));
这是执行此操作的更短方法:
function removeSpecialCharacters(metadata) {
return metadata.map(datum =>
({ ...datum, id: datum.id.replace(/[.|&;$%@%"<>+]/g, '') })
)
}
const data = [{id: "somethin%g", apple: "dfgdf efd"}];
console.log(removeSpecialCharacters(data));