我在ReactJS应用程序中更新对象时遇到问题。我正在使用map语句更改对象的分区键,但最终对象仍包含原始分区键。预期行为是更新分区键。我在下面包含了我的代码,以及实际的和期望的输出。你能帮助我理解为什么分区键没有被更新,以及我如何解决这个问题吗?
this.state = {
keyb: 0,
clockVisiblity:false,
partitions:[
{id:1,name:"P1"},
{id:2,name:"P2"},
{id:3,name:"P3"},
],
dayDetails:[
{
"day":"Monday",
"full_day":false,
"partition":1,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
},
],
activePartition:1,
}
setPartitionsDetails=()=>{
var partitionData = this.state.dayDetails.find((item)=>item.partition===this.state.activePartition)
const dayDetails = this.state.partitions.map((partition) => {
partitionData.partition=partition.id
console.log("You object ",partitionData)
return partitionData
}
)
}
daydetails的最终目标是:
[
{
"day":"Monday",
"full_day":false,
"partition":3,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
},
{
"day":"Monday",
"full_day":false,
"partition":3,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
},
{
"day":"Monday",
"full_day":false,
"partition":3,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
}
]
其中所需对象包含唯一的或不同的分区密钥。
[
{
"day":"Monday",
"full_day":false,
"partition":1,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
},
{
"day":"Monday",
"full_day":false,
"partition":2,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
},
{
"day":"Monday",
"full_day":false,
"partition":3,
"start_time":"Thu Sep 01 2022 18:47:09 GMT+0500 (PKT)"
}
]
2条答案
按热度按时间dnph8jn41#
发生这种情况是因为您使用
partitionData
的同一个示例写入分区的值,因此2被覆盖在1上,3被覆盖在2上,并且您在所有示例中得到3,您可以通过克隆partitionData
并在更新后返回该克隆来修复此问题。由于
partition
位于该对象的第一级,因此浅克隆在这里有效,但是对于嵌套对象,应该考虑深克隆。z4bn682m2#
这是因为您Map了分区,所以您将只拥有最后一个值,即3。您可以确保只使用一个ID的方法是使用拼接。