2017-05-25 34 views
1

我想用normalizr來標準化我的數據。問題是我在我的數據中有一個鍵(teams),它與其他數據沒有關係。JS normalizr如何將無關密鑰添加到實體

例如:

const data = { 
    programs: [{ 
     id: 1, 
     label: 'Program one', 
     products: [{ 
      id: 1, 
      label: 'Product one', 
      releases: [{ 
      id: 1, 
      label: 'Release one', 
      }] 
     } 
     ] 
    } 
    ], 
    teams: [{ 
     id: 1, 
     value: 1, 
     label: 'Team one', 
    } 
    ] 
} 

而且我的架構:

const release = new schema.Entity('releases'); 

    const product = new schema.Entity('products', { 
    releases: [release] 
    }); 

    const program = new schema.Entity('programs', { 
    products: [product], 
    }); 

    normalize(data, [program]); 

如何我也加入隊中的實體對象,通過normalizr產生的?所以結果需要:

const release = new schema.Entity('releases'); 

const product = new schema.Entity('products', { 
    releases: [release] 
}); 

const program = new schema.Entity('programs', { 
    products: [product], 
}); 

// add team entity 
const team = new schema.Entity('teams'); 

// the encompassing schema 
const dataschema = { 
    programs: [program], 
    teams: [team] 
} 

// normalize 
normalize(data, dataschema); 

// or omit dataschema definition and pass in directly 
normalize(data, { 
    programs: [program], 
    teams: [team] 
}); 

將導致:如果你告訴它你的數據的涵蓋架構

{ 
    entities: { 
    products: {}, 
    programs: {}, 
    releases: {}, 
    teams: [] 
    } 
} 

回答

2

normalizr可以處理不相交的數據集

注意result對象現在由包含頂級實體鍵的兩個數組組成。

{ 
    entities: { 
     releases: { 
      1: { 
       id: 1, 
       label: "Release one" 
      } 
     }, 
     products: { 
      1: { 
       id: 1, 
       label: "Product one", 
       releases: [1] 
      } 
     }, 
     programs: { 
      1: { 
       id: 1, 
       label: "Program one", 
       products: [1] 
      } 
     }, 
     teams: { 
      1: { 
       id: 1, 
       value: 1, 
       label: "Team one" 
      } 
     } 
    }, 
    result: { 
     programs: [1], 
     teams: [1] 
    } 
}