带传播运算符的forEach返回未定义

时间:2019-02-09 09:15:48

标签: javascript

我有一个这种类型的对象数组:

[{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。为什么?

2 个答案:

答案 0 :(得分:3)

您必须将 if let savedSection = savedDict["Sections"] as? [[String : Any]] { //EDIT*** print("Saved Title: \(savedSection[0]["Title"])") *// inplace of 0 any index you want, } 替换为forEachmap不返回数组。它只是运行循环的内容并丢弃结果。 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 mapforEach

答案 1 :(得分:1)

因为while(!(text=input.nextLine()).equals("*")) 的返回值为forEachMDN)。请改用Array.prototype.map()

此外,如果您只想在undefined中使用字母数字字符,则可以简单地使用以下正则表达式:id

\W+与所有非字母数字字符匹配。用空字符串替换它们。

\W+