Javascript 未正确删除对象内部的数组

Javascript 未正确删除对象内部的数组,javascript,arrays,Javascript,Arrays,我有一个叫做位置的数组 const [location,setLocation]=useState([]); const addLocation=(place)=>{ // place={name:"abc",pin:"232",person:[]} const _location=[...location]; const person1={name:"dfg",age:"10"} place.person.push(person1); setloc

我有一个叫做位置的数组

const [location,setLocation]=useState([]);


const addLocation=(place)=>{  // place={name:"abc",pin:"232",person:[]} 
    const _location=[...location];
    const person1={name:"dfg",age:"10"}
    place.person.push(person1);
    setlocation([...location,place]);
}

const removeLocation=(index)=>{
    const _location=[...location];
    _location.splice(index,1) 
setLocation(_location);
}
状态变为空

但问题是,如果我再次添加相同的人物,人物数组将再次使用相同的对象增加 像这样

{name:"abc",pin:"232",person:[{name:"dfg",age:"10"},{name:"dfg",age:"10"}]} 

在将此人添加到位置之前,您必须检查他可能已经存在的任何内容。
您可以这样轻松地执行此操作:

const addLocation=(place)=>{
常量位置=[…位置];
const person1={姓名:“dfg”,年龄:“10”};
if(place.person.findIndex(e=>e.name==person1.name)=-1)
地点.人.推(人1);
设置位置([…位置,地点]);
}

在我的示例中,我只检查人名。你也可以在ofc中添加其他内容。

是的,我可以这样做,但我正在将对象完全从位置数组中移除,并且在我添加到位置数组之后。为什么会发生这种情况,它引用的是任何临时数据吗?任何解决方案都没有检查IsExit。那么,
removeLocation
的lambda将捕获当前位置数组(至少在您当前的代码中)。因此,当您更改数组时,实际上不会更改
removeLocation
正在使用的数组。任何解决方案请在removeLocation和addLocation方法中执行
const[location,setLocation]=useState([]);
)谢谢我发现这个库可以解决这个变异问题谢谢