Javascript 地图没有';t返回正确的对象数组

Javascript 地图没有';t返回正确的对象数组,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,尝试进行映射以将选定值设置为true和false,但它不会改变现有的true值,有什么问题 selectTab = tab => e => { const { data } = this.state; this.setState( { data: data.map(o => o.tab === tab ? { selected: true, ...o } : { selected: false, ...o }

尝试进行映射以将选定值设置为true和false,但它不会改变现有的true值,有什么问题

selectTab = tab => e => {
    const { data } = this.state;
    this.setState(
      {
        data: data.map(o =>
          o.tab === tab ? { selected: true, ...o } : { selected: false, ...o }
        )
      },
      () => console.log(this.state.data)
    );
  };

首先尝试展开对象,然后添加选定的
属性。否则,
o
中的
选定的
属性每次都会覆盖它

selectTab = tab => e => {
  this.setState(
    prevState => ({
      data: prevState.data.map(o =>
        o.tab === tab ? { ...o, selected: true } : { ...o, selected: false }
      )
    }),
    () => console.log(this.state.data)
  );
};
类应用程序扩展了React.Component{
状态={
数据:[
{
表1:,
内容:“表1内容”,
所选:真
},
{
表2:,
内容:“表2内容”
},
{
表3:,
内容:“表3内容”
}
]
};
选择tab=tab=>e=>{
这是我的国家(
prevState=>({
数据:prevState.data.map(o=>
o、 tab===tab?{…o,所选:true}:{…o,所选:false}
)
}),
()=>console.log(this.state.data)
);
};
render(){
const{activeTab,data}=this.state;
返回(
{data.map(obj=>(
{obj.tab}
))}
{data.map(obj=>(
{obj.selected&&obj.content}
))}
);
}
}
render(,document.getElementById(“根”))


wow nice catch,是否有任何情况下您希望在最后使用spread?@DennisNgu:对于对象spread,我想不出任何使用情况,但如果是数组,则是
const newArr=[…oldArr,newElement]
vs
const newArr=[newElement,…oldArr]
。这将改变产品的顺序element@DennisNgu您通常希望创建一个覆盖了某些属性的新对象,即
{…o,selected:true}
,但您可能会有一个具有默认值的对象,并可能通过将对象放在末尾来覆盖它们,如
const settings={logLevel:2,…o}@Tholle:Ha!我从来没有想过它可以使用它的默认值!非常感谢!