2017-07-19 40 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

謝謝,我會稍後再試。 –