2017-07-19 75 views
1

我有以下代码:阵营JS - 在多个阵列的映射来得到一个数组

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.loglatLng状态,我得到以下结构:

[ 
    [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] 
] 

我怎样才能达到它在我的情况?

+0

你可以分享'this.state.items'的样本数据吗? – Muhaimin

+0

@MuhaiminAbdul是的,它是一个具有不同数据的对象数组,它看起来像这样: '[name:“someName”,data:[]'。我不需要所有的数据,所以我只返回我需要的东西。 –

回答

0

我想在这里做的是简化以帮助你想要达到的目标。希望它有帮助

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 })) 
}); 
+0

谢谢,我会稍后再试。 –