将一个对象分配给另一个没有所有字段的对象

时间:2019-08-19 12:11:42

标签: 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.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);并收到了错误消息

  

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

4 个答案:

答案 0 :(得分:3)

this.currentRegion = {...this.currentRegion, latitude: coords.latitude, longitude: coords.longitude}

答案 1 :(得分:0)

尝试

this.currentRegion.latitude = coords.latitude
this.currentRegion.longitude = coords.longitude
this.currentRegion.latitudeDelta = coords.latitudeDelta
this.currentRegion.longitudeDelta = coords.longitudeDelta

答案 2 :(得分:0)

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

为什么使用setState代替this.state

  

切勿直接更改 this.state ,因为此后可能会调用 setState()   替换您所做的突变。将 this.state 视为   不变的。

     

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

如需进一步讨论,请点击此处:What the difference of this.state and this.setstate in ReactJS?

答案 3 :(得分:-1)

与许多问题一样,您可以使用Array.prototype.reduce解决此问题。 此解决方案的好处是您不必对要传输的字段进行硬编码-它只会覆盖已经存在的所有字段。

let currentRegion = {
  latitude: 25.3170013,
  longitude: 55.4748285,
  latitudeDelta: 123,
  longitudeDelta: 456,
};

const coords = {
  accuracy: 20,
  altitude: 5,
  heading: 0,
  latitude: 25.380599999999998,
  longitude: 55.3992,
  speed: 0,
};

console.log(currentRegion);

currentRegion = Object.keys(coords).reduce((acc, val) => {
  if (typeof acc[val] !== 'undefined') {
    acc[val] = coords[val];
  }

  return acc;
}, currentRegion);

console.log(currentRegion);