2017-07-03 12 views
0

子オブジェクトから動的に取得することは可能ですか?基本的に、私が達成しようとしているのは、子オブジェクトの親に属するプロパティの値を動的に取得することだけです。たとえば、以下のJSONに、私はJSONのネストされたオブジェクトの子オブジェクトから親オブジェクトをタイプスクリプト

{ 
     "driver": [ 
      { 
       "id": 1,  | 
       "name": "Bob", |=> this is the parent 
       "age": "34", | 
       "car": [ 
        { 
         "make": "BMW",  | 
         "model": "3.20", | this is the child 
         "colour": "Silver",| 
         "mileage": [ 
          { 
           "total": "350523", 
           "year": [ 
            { 
             "2011": "3535", 
             "2012": "7852", 
             "2013": "8045" 
            } 
           ], 
           "month": [ 
            { 
             "december": "966", 
             "november": "546", 
             "october": "7657" 
            } 
           ] 
          } 
         ] 
        } 
       ] 
     } 
     ] 
    } 
+0

を使用するのに適したライブラリになります。あなたは正確に何を探しているのですか? – Aravind

+0

もう一度質問を確認できますか?私はそれを明確にした – SuperGirl

+0

あなたはどのように親コンポーネント**ドライバ**情報を取得するつもりですか?あなたはそれをどこで使っていますか? – Aravind

答えて

0

forループの使用:

for(let parent of data.driver) { 
    for(let car of parent.car) { 
     if(car.make === 'BMW') { 
      // can do what you like with 'parent' 
     } 
    } 
} 

filter()またはfind()(標準ジャバスクリプト)を使用して:また

drivers_who_drive_bwm = data.driver.filter((parent) => { 
    // find() will give -1, if no car was found that matched 
    // car.make === 'BWM' 
    return parent['car'].find((car) => car.make === 'BWM') !== -1 
}) 

あなたの命名規則が混乱しています。私はdriver.carが1台の車になることを期待しています。あなたのコードでは、車の配列です。それは常に1台の車が含まれている場合は、配列を使用しない方が良いでしょう。 .driverと同じです。より良いキーは、複数のドライバを示すために.driversです。 (ただし、XMLがjsonに変換されている場合、その場合はそれに固執しています)

+0

それは私が探していたものです、ありがとう – SuperGirl

1

ものは何でもあなたが選択した戦略、あなたは基本的にを反復処理し、帰国されます。:特定の車の運転手を抽出したいです。だから私はあなたが最も快適なものを使っている "最高の"戦略を感じています。

TypescriptはちょうどJavascriptです。したがって、Javascript-eyの "関数型プログラミング"のやり方に慣れていれば、配列マップ&フィルタを使用することができます。

もちろん、 "同じメーカー/モデルが異なるドライバ間に存在するとどうなりますか?"などの指定されていないアプリケーション固有のロジックを処理する必要があります。

関数型プログラミングに慣れていない場合は、一連のマップを構築してからルックアップを実行できます。

しかし、それを正しくする必要がある場合は、常にあなたが快適にやっていることをしてください。

0

この質問に答えるために、オブジェクト参照は単なるメモリ位置です。両親がここに来るという概念はない。 (親としての論理的な考え方なので、他のオブジェクトがそれを参照するプロパティを持っていない可能性があります)、または多くのオブジェクトが同じメモリ位置(つまりロジックによって複数の親)を参照している可能性があります。

1>そういうわけで、各子要素に親参照をプログラム的に入れることができます。ここではJSON文字列を解析することはできません。JSON文字列にはJSONデータのみが含まれており、解析可能なものとして参照されていないためです。

2>または、条件に応じて値を含む子オブジェクトを持つドライバオブジェクト(親オブジェクト)を探してみてください。そのためには、配列関数のfiltermapをjavascriptで使用してください。あなたがやっていることは、反復して見つけることだけです。その場合、underscrore jsは、子である親である

関連する問題