reactjs 根据react中不同数组中不同对象的id更新数组中对象的值

zy1mlcev  于 2022-12-22  发布在  React
关注(0)|答案(2)|浏览(166)

如果我有这样一个数组:

const[arr,setArr] = React.useState([
{label:"dummy01",id:2},
{label:"dummy02",id:5},

])

无论如何都要用这样数组更新arr

const newArray = [{label:'dummy Altered01',id:2},{label:'different',id:10},{label:'different 02',id:55}}

我期望得到一个这样的数组

[
{label:"dummy Altered01",id:2},
{label:"dummy02",id:5},
{label:'different',id:10},
{label:'different 02',id:55}
]

如您所见,更新了ID为2的对象,并将其他新对象添加到数组中,而不擦除先前的dummy02
我不知道如何比较两个不同数组中的id

ccrfmcuu

ccrfmcuu1#

让我们考虑一下

a = [{label:"dummy01",id:2},{label:"dummy02",id:5}]

新数组为

b= [{label:'dummy Altered01',id:2},{label:'different',id:10},{label:'different 02',id:55}]

现在对新数组执行迭代

b.forEach((item)=>{
    let index = a.findIndex((x)=>x.id == item.id) 
    if(index > -1){
       a[index].label = item.label
    }
    else
    a.push(item)
})

console.log(a)
3zwjbxry

3zwjbxry2#

我知道这不是最好的答案,所以这是我的答案

let listOfIds = newArray.map(item => item.id)
newArray = newArray.concat(arr.filter(item => !listOfIds.includes(item.id)))

首先将newArrayMap到一个ID列表中,然后将newArray与过滤后的原始数组进行连接(也就是说,现在的数组中没有任何项的ID与过滤后的数组相同)
最后,通过setArr(newArr)更新状态
希望这能回答你的问题

相关问题