2016-08-06 10 views
0

listDataと呼ばれるオブジェクトの配列を持っています。これは、特定の情報を別のマーカーと呼ばれるものから呼び出したいものです。forループを使用してオブジェクトの配列を作成する方法

var markers = []; 
for(let i=0;i<listData.length;i++){ 
    markers.push({ 
     latitude:this.state.listData[i].geometry.location.lat, 
     longitude:this.state.listData[i].geometry.location.lng, 
     title:this.state.listData[i].name 
    }); 
} 

ただし、動作しません。あなたのコードから

+0

変数はlistDataまたはthis.state.listDataですか?条件を確認してください –

+0

なぜ状態を別のオブジェクトにプッシュしますか?レンダリングの状態をそのまま使用することはできませんか、それとも子コンポーネントに小道具として渡す必要がありますか? – Edgesoft

+0

はい、私は後者をやろうとしていました –

答えて

3

私はこのようなデータの返品に「マップ」を使用します。他の人が投稿したものは何も間違っていませんが、私はこの簡潔な構文が少しうまくいくのが好きです。私は間違って最初の値を参照していると仮定しています。あなたはループ内でthis.state.listDataを使用しませんでした。

var markers = this.state.listData.map(function(v){ 
    return { 
     latitude:v.geometry.location.lat, 
     longitude:v.geometry.location.lng, 
     title:v.name 
    } 
}) 
0

、私はあなたが以下のようなものが必要であることを前提としています

for(let i=0; i < listData.length; i++){ 
    markers.push(
    { 
     latitude: listData[i].geometry.location.lat, 
     longitude: listData[i].geometry.location.lng, 
     title: listData[i].name 
    } 
); 

あなただけlistDataをループにしたいと、この配列(またはオブジェクトのような配列)の各項目の追加に新しいオブジェクトmarkersアレイ。だから、this.stateを使ってlistDataにアクセスした理由は分かりません。

0

試してみてください。これはあなたが望むものだと思います。

thisを削除してから階層を開始してください。this.stateを削除して後で開始することができない場合は、その階層を開始してください。

var markers = []; 
 

 
for(var i = 0; i < 5; i++){ 
 
markers.push(
 
    { 
 
    latitude:'0123', 
 
    longitude:'0345' 
 
    }); 
 
} 
 

 
console.log(markers);

変更あなた自身のために望むようvaluesを追加します。

関連する問題