2017-05-25 52 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] 
    } 
}