我有一个这种类型的对象数组:
[{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
。为什么?
答案 0 :(得分:3)
您必须将 if let savedSection = savedDict["Sections"] as? [[String : Any]] { //EDIT***
print("Saved Title: \(savedSection[0]["Title"])") *// inplace of 0 any index you want,
}
替换为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));
请参阅MDN上的doc on map和forEach。
答案 1 :(得分:1)
因为while(!(text=input.nextLine()).equals("*"))
的返回值为forEach
(MDN)。请改用Array.prototype.map()
此外,如果您只想在undefined
中使用字母数字字符,则可以简单地使用以下正则表达式:id
\W+
与所有非字母数字字符匹配。用空字符串替换它们。
\W+