JS нормализр как добавить неродственный ключ к сущностям
Я хочу нормализовать свои данные с normalizr
, Проблема в том, что у меня в моих данных один ключ (teams
) что он не имеет отношения к другим данным.
Например:
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
? Таким образом, результаты должны быть:
{
entities: {
products: {},
programs: {},
releases: {},
teams: []
}
}
1 ответ
Решение
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]
});
приведет к:
Обратите внимание, что 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]
}
}