Javascript 如何在normalizer中为同一实体拥有多个标识符?

Javascript 如何在normalizer中为同一实体拥有多个标识符?,javascript,ecmascript-6,redux,normalizr,es6-map,Javascript,Ecmascript 6,Redux,Normalizr,Es6 Map,如果您有一个规范化的redux存储并使用实体ID,但也有其他唯一标识符并且还需要使用它们,您会怎么做 范例 { entities: { users: { 1: { name: 'foo', id: 1, //unique uuid: '3d89afe9-6a85-46ed-ac0d-28e10b21d09e' // unique },

如果您有一个规范化的redux存储并使用实体ID,但也有其他唯一标识符并且还需要使用它们,您会怎么做

范例

{ 
   entities: {
        users: {
           1: {
              name: 'foo',
              id: 1, //unique
              uuid: '3d89afe9-6a85-46ed-ac0d-28e10b21d09e' // unique
            },
            // ...
        }
   }
}
大多数情况下,我使用
id
属性来查找实体,但有时我只使用
uuid
属性

有没有一种方法可以使用更高级的模式来创建第二个字典,将
uuid
映射到
id
,使用es6映射来创建一个由
id
uuid
组成的键,或者其他我没有想到的方法

以下是有用的:

{ 
   entities: {
        users: {
           1: {
              name: 'foo',
              id: 1, //unique
              uuid: '3d89afe9-6a85-46ed-ac0d-28e10b21d09e' // unique
            },
            // ...
        }
        usersUuidToIdMapping: {
           '3d89afe9-6a85-46ed-ac0d-28e10b21d09e': 1
           // ...
        }   

   }
}
最好的,
Faruk

如果要将
uuid
定义为id,可以在定义实体时在
idAttribute
选项中使用字符串

new schema.Entity('users', {}, { idAttribute: 'uuid' })
如果要同时使用这两个参数,则
idAttribute
可以是一个具有三个参数
value
parent
键的函数

new schema.Entity('users', {}, {
  idAttribute: user => user.uuid ? `${user.id}-${user.uuid}` : user.id
})

这里有更多信息:

您好,谢谢,但我不想合并ID。我希望能够根据uuid或id查找项目。