Javascript 将一个对象指定给另一个没有所有字段的对象

Javascript 将一个对象指定给另一个没有所有字段的对象,javascript,reactjs,typescript,react-native,Javascript,Reactjs,Typescript,React Native,我有一个这样的物体 this.currentRegion = { latitude: 25.3170013, longitude: 55.4748285, latitudeDelta: LATITUDE_DELTA, longitudeDelta: LONGITUDE_DELTA, }; 还有另一个物体 coords = { accuracy: 20, altitude: 5, heading: 0, latitude: 25.3

我有一个这样的物体

this.currentRegion = {
    latitude: 25.3170013,
    longitude: 55.4748285,
    latitudeDelta: LATITUDE_DELTA,
    longitudeDelta: LONGITUDE_DELTA,
};
还有另一个物体

coords = {
    accuracy: 20,
    altitude: 5,
    heading: 0,
    latitude: 25.380599999999998,
    longitude: 55.3992,
    speed: 0,
}
我需要

this.currentRegion = {
    latitude: 25.380599999999998,
    longitude: 55.3992,
    latitudeDelta: LATITUDE_DELTA,
    longitudeDelta: LONGITUDE_DELTA,
}
我尝试了
this.currentRegion=Object.assign(this.currentRegion,region.coords)并获得错误

试图在不可变且已冻结的对象上设置密钥

试一试

试一试


如果您在React中尝试此操作,请使用
this.setState({currentRegion:…this.currentRegion,纬度:coords.latitude,经度:coords.longitude})

为什么使用setState而不是this.state

切勿直接对该状态进行变异,因为之后调用setState()可能会 替换你所做的变异。将此状态视为 不变的

setState()不会立即变异此.state,但会创建一个 等待状态转换。调用此命令后访问此.state 方法可能返回现有值


如需进一步讨论,请检查此处:

如果您尝试在React中使用
this.setState({currentRegion:…this.currentRegion,latitude:coords.latitude,longitude:coords.longitude})

为什么使用setState而不是this.state

切勿直接对该状态进行变异,因为之后调用setState()可能会 替换你所做的变异。将此状态视为 不变的

setState()不会立即变异此.state,但会创建一个 等待状态转换。调用此命令后访问此.state 方法可能返回现有值


关于进一步的讨论,请查看此处:

由于问题太多,您可以使用
Array.prototype.reduce来解决此问题。
此解决方案的好处是,您不必硬编码要传输的字段-它只会覆盖任何已存在的字段

让currentRegion={
纬度:25.3170013,
经度:55.4748285,
latitudeDelta:123,
longitudeDelta:456,
};
常数坐标={
准确度:20,
海拔:5,
标题:0,
纬度:25.38059999998,
经度:55.3992,
速度:0,
};
console.log(当前区域);
currentRegion=Object.keys(coords).reduce((acc,val)=>{
if(acc[val]的类型!==‘未定义’){
acc[val]=坐标[val];
}
返回acc;
},当前区域);

console.log(当前区域)与许多问题一样,您可以使用
Array.prototype.reduce
解决此问题。 此解决方案的好处是,您不必硬编码要传输的字段-它只会覆盖任何已存在的字段

让currentRegion={
纬度:25.3170013,
经度:55.4748285,
latitudeDelta:123,
longitudeDelta:456,
};
常数坐标={
准确度:20,
海拔:5,
标题:0,
纬度:25.38059999998,
经度:55.3992,
速度:0,
};
console.log(当前区域);
currentRegion=Object.keys(coords).reduce((acc,val)=>{
if(acc[val]的类型!==‘未定义’){
acc[val]=坐标[val];
}
返回acc;
},当前区域);
console.log(当前区域)
this.currentRegion.latitude = coords.latitude
this.currentRegion.longitude = coords.longitude
this.currentRegion.latitudeDelta = coords.latitudeDelta
this.currentRegion.longitudeDelta = coords.longitudeDelta
this.currentRegion = {...this.currentRegion, latitude: coords.latitude, longitude: coords.longitude}