我的嵌套JSON中的实体已经遵循normalizr格式,其中idAttribute已经是定义对象的键:
groups: [{
id: 'foo',
families: {
smiths: {
people: [{
id: 'sam',
}, {
id: 'jake',
}],
},
jones: {
people: [{
id: 'john',
}, {
id: 'sue',
}],
},
},
}];
在此示例中,请注意families
属性正在使用ID(smiths
,jones
)来标识具有ID的对象数组的people
。
这种模式可能如下所示:
const person = new Entity('person');
const family = new Entity('family', {
people: [person],
}, {idAttribute: ???});
const group = new Entity('family', {
family: [family],
});
问题:有没有办法指定架构的idAttribute是定义它的关键?换句话说,我如何定义Family
的架构,因为它与groups
和people
相关?
另一个问题是,有没有办法denormalize
扁平状态,以便家庭families: {[id]: obj}
模式保持与上面示例json中的相同?
答案 0 :(得分:2)
有没有办法指定架构的idAttribute是定义它的键?
是。 idAttribute
函数有3个参数:value
,parent
和key
。请阅读docs。在您的情况下,您可以使用key
以及schema.Values
const family = new schema.Entity('families', {
people: [ person ]
}, (value, parent, key) => key);
const families = new schema.Values(family);
const group = new schema.Entity('groups', {
families
});
对于denormalize
,您需要family
的单独架构,因为无法从密钥中派生ID。