繁体   English   中英

React JS-映射多个数组以获得一个数组

[英]React js - mapping over multiple arrays to get one array

我有以下代码:

let getEntries = Object.entries(this.state.items).forEach(([key, value]) => {
    let pos = value[1].location;
    for (var lat in pos) {
      let lt = ${pos[lat]};
      this.setState({lat: this.state.lat.concat(lt)});
    };
    for (var lon in pos) {
      let ln = ${pos[lon]};
      this.setState({lon: this.state.lon.concat(ln)})
    };
    let latLng = this.state.lat.map((value,index)=>[parseFloat(value),parseFloat(this.state.lon[index])]);
    this.setState({latLng});
  });

如果我使用console.log latLng状态, latLng得到以下结构:

[
    [val1, val2]
    [val1, val2]
    [valN, valN]
]

如您所见,我通过遍历相应的对象来获取对象值,然后在let latLng ,使这些值形成单个数组。 它可以按照预期的方式工作,但是我还需要一些其他数据才能放在该latLng数组中。 我以相同的方式获得此数据,例如:

let getMessage = Object.entries(this.state.items).forEach(([key, value]) => {
    let value = value[1].message;
    for (var i in value) {
      let messages = value[i];
      this.setState({messages: this.state.messages.concat(messages)});
    }
  });
let getSomethingOther = Object.entries(this.state.items).forEach(([key, value]) => {
    let someValue = value[1].someProperty;
    for (var someProp in someValue) {
      let someOutput = someValue[someProp];
      this.setState({someState: this.state.someState.concat(someOutput)});
    }
  });

这些函数可以工作,但是现在我需要将它们放入存储在状态中的latLng数组中,并可以使用this.state.latLng进行this.state.latLng 我想我需要像第一个示例中的map函数之类的东西,但是我无法使其正常工作。 最终,我需要可以通过this.state.latLng使用的结构:

[
   [val1, val2, val3, val4]
   [val1, val2, val3, val4]
   [val1, val2, val3, val4]
   [valN, valN, valN, valN]
]

我该怎么办?

我在这里试图做的是简化以帮助您达到目标。 希望能帮助到你

let getEntries = Object.entries(this.state.items).map(key, value) => {
    const latlon = this.state.latlng.concat([pos.lat, pos.lon])
    this.setState({ lat: this.state.lat.concat(pos.lat), lon: this.state.lon.concat(pos.lon) }, () => this.setState({ latlon }))
});

我相信您正在寻找flatMap()函数。 las,我无法在reactjs中用Google找到它。 也许您可以使用这种漂亮而最少的单行Javascript实现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM