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

时间:2017-07-19 11:29:27

标签: javascript arrays reactjs

我有以下代码:

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说明,我会得到以下结构:

[
    [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来调用它。我想我需要像第一个例子中那样的map函数,但我不能让它工作。最终我需要这样的结构,我可以通过我的this.state.latLng使用

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

我怎样才能达到这个目的?

2 个答案:

答案 0 :(得分:0)

我在这里尝试做的是简化以帮助您实现您想要达到的目标。希望它有所帮助

file:///path/to/your/file.js

答案 1 :(得分:0)

我相信你正在寻找flatMap()功能。唉,我不能谷歌 - 在reactjs找到它。也许你可以使用这个pretty and minimal one-line Javascript implementation