2

我有非常嵌套的 JSON 中的实体,它们已经遵循 normalizr 格式,其中 idAttribute 已经是定义对象的键:

groups: [{
  id: 'foo',
  families: {
    smiths: {
      people: [{
        id: 'sam',
      }, {
        id: 'jake',
      }],
    },
    jones: {
      people: [{
        id: 'john',
      }, {
        id: 'sue',
      }],
    },
  },
}];

在此示例中,请注意该families属性使用 id ( smiths, jones) 来标识people谁是具有 id 的对象数组。

此模式可能如下所示:

const person = new Entity('person');
const family = new Entity('family', {
  people: [person],
}, {idAttribute: ???});
const group = new Entity('family', {
  family: [family],
});

问题:有没有办法指定模式的 idAttribute 是定义它的关键?换句话说,我将如何定义与andFamily相关的架构?groupspeople

另一个问题,有没有办法达到denormalize扁平状态,以便家庭families: {[id]: obj}模式与上面的示例 json 中的模式保持一致?

4

1 回答 1

3

有没有办法指定模式的 idAttribute 是定义它的关键?

是的。该idAttribute函数接受 3 个参数:valueparentkey。请阅读文档。在您的情况下,您可以使用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 不能从密钥派生。

于 2017-07-11T21:11:05.340 回答