Javascript 为什么我的带有扩展语法的map()不起作用?

Javascript 为什么我的带有扩展语法的map()不起作用?,javascript,dictionary,spread-syntax,Javascript,Dictionary,Spread Syntax,我真的看不出哪里出了问题。我在Banks&Porcello的O'Reilly的《Learning React》中看到过关于这个特殊例子的帖子。然而,这些帖子似乎很好用,但我的例子却不行。如果我有打字错误,我看不到。我的缺点在哪里?我不知道为什么我得到的是空字符串值而不是“HB Woodlawn” //编辑对象数组中的一个对象 让学校=[ {name:'Yorktown'}, {名称:'斯特拉特福德'}, {姓名:'华盛顿和李'}, {name:'Wakefield'} ]; const edi

我真的看不出哪里出了问题。我在Banks&Porcello的O'Reilly的《Learning React》中看到过关于这个特殊例子的帖子。然而,这些帖子似乎很好用,但我的例子却不行。如果我有打字错误,我看不到。我的缺点在哪里?我不知道为什么我得到的是空字符串值而不是“HB Woodlawn”


//编辑对象数组中的一个对象
让学校=[
{name:'Yorktown'},
{名称:'斯特拉特福德'},
{姓名:'华盛顿和李'},
{name:'Wakefield'}
];
const editName=(旧名、新名、arr)=>
arr.map(项目=>{
如果(item.name==oldName){
返回{
…项目,
名称
}
}
否则{
退货项目
}
});
让updatedSchools=editName('Stratford','HB Woodlawn',schools);
console.log(更新的学校[1]);//姓名:“
console.log(学校[1]);//姓名:“斯特拉特福德”

您没有为名称添加新值,而是将其留空。添加了
name:newName

您当然不需要这样做:

...item,
name: newName
一旦您执行了排列进行复制,并将其保留为纯函数,您就可以返回新值,映射将从回调函数获取该值

因此,对你的问题更好的回答是,你实际上是在打字,写名字,而不是新名字。该变量在书中被称为name,一旦您重写了函数,您就忘记了它:)

只要换线

  return {
    ...item,
    name
  }


这是清洁剂:)

注意:
不是操作员。(在别人说之前:忽略MDN页面上的URL,这是创建页面的人的错误。)嗯,
spread操作符对吗?
...item,
name: newName
  return {
    ...item,
    name
  }
  return {
    ...item,
    newName
  }