2017-07-03 10 views
0

私はAPIから得られる領域のリストを持っています。このリストには、複数の建物があります。これはJSのようになります:ノーマライザーを使用した双方向リンク

const regions = [ 
    { 
    guid: 'REGION1-GUID', 
    name: 'Region 1', 
    buildings: [ 
     { 
     guid: 'REGION1-BUILDING1-GUID', 
     name: 'Region 1 Building 1' 
     }, 
     { 
     guid: 'REGION1-BUILDING2-GUID', 
     name: 'Region 1 Building 2' 
     } 
    ] 
    }, 
    { 
    guid: 'REGION2-GUID', 
    name: 'Region 2', 
    buildings: [ 
     { 
     guid: 'REGION2-BUILDING1-GUID', 
     name: 'Region 2 Building 1' 
     }, 
     { 
     guid: 'REGION2-BUIDLING2-GUID', 
     name: 'Region 2 Building 2' 
     } 
    ] 
    } 
]; 

ここでnormalizrを使用してこのJSオブジェクトを正規化します。後でやりたいことは、建物からその地域を得ることです。

だから私は、次の操作を実行しようとした:

// Define the buildings schema 
const building = new schema.Entity('building', {}, { idAttribute: 'guid' }); 

// Define the regions schema 
const region = new schema.Entity(
    'regions', 
    { 
    buildings: [building] 
    }, 
    { idAttribute: 'guid' } 
); 

const regionList = [region]; 

const normalizeData =() => { 
    const normalizedData = normalize(data, regionList); 

これは私のオブジェクトを正常化し、normalizedDataはこのようなものです:

{ 
    "entities":{ 
     "building":{ 
     "REGION1-BUILDING1-GUID":{ 
      "guid":"REGION1-BUILDING1-GUID", 
      "name":"Region 1 Building 1" 
     }, 
     "REGION1-BUILDING2-GUID":{ 
      "guid":"REGION1-BUILDING2-GUID", 
      "name":"Region 1 Building 2" 
     }, 
     "REGION2-BUILDING1-GUID":{ 
      "guid":"REGION2-BUILDING1-GUID", 
      "name":"Region 2 Building 1" 
     }, 
     "REGION2-BUIDLING2-GUID":{ 
      "guid":"REGION2-BUIDLING2-GUID", 
      "name":"Region 2 Building 2" 
     } 
     }, 
     "regions":{ 
     "REGION1-GUID":{ 
      "guid":"REGION1-GUID", 
      "name":"Region 1", 
      "buildings":[ 
       "REGION1-BUILDING1-GUID", 
       "REGION1-BUILDING2-GUID" 
      ] 
     }, 
     "REGION2-GUID":{ 
      "guid":"REGION2-GUID", 
      "name":"Region 2", 
      "buildings":[ 
       "REGION2-BUILDING1-GUID", 
       "REGION2-BUIDLING2-GUID" 
      ] 
     } 
     } 
    }, 
    "result":[ 
     "REGION1-GUID", 
     "REGION2-GUID" 
    ] 
} 

しかし、私は、反復処理する必要があり、建物の領域を取得します建物がリストに含まれているかどうかをチェックします。私は正規化によって付加価値を得ることはできません。

私は両方向でリンクできれば完璧です。すべての地域には建物のガイドのリストがあり、すべての建物には1つの地域のガイドがあります。

normalizrでこれを達成する方法はありますか?最善のアプローチは何でしょうか?

ありがとうございました。

答えて

0

私はいくつかのことを試して、実際の解決策を見つけました。よりよいアプローチがあるかどうかはわかりませんが、それは非常にクリーンなコードであり、機能しています。

私はちょうどに、建物のエンティティの定義を変更する必要がありました:これは、地域からのGUIDを保持している建物にプロパティ「regionGuid」を追加します

// Define buildings schema 
const building = new schema.Entity(
    'building', 
    {}, 
    { 
    idAttribute: 'guid', 
    processStrategy: (entity, parent) => ({ ...entity, regionGuid: parent.guid }) 
    } 
); 

関連する問題