Надеюсь найти более эффективный способ решения приведенной ниже проблемы, чем мое текущее решение (которое входит в комплект).
У меня есть следующий массив, описывающий пользователя:
const userFields = [
{key: "name", value: "tyler"},
{key: "location", value: "boston"},
{key: "phone", value: "555-555-5555"},
{key: "email", value: "tyler@test.com"}
]
имассив, в котором указаны допустимые первичные поля (некоторые обязательные, некоторые необязательные):
const primaryFields = [
{ key: "name", alias: ["nickname"], required: true },
{ key: "address", alias: ["location", "homebase"], required: true },
{ key: "age", alias: [], required: true },
{ key: "phone", alias: [], required: false },
{ key: "gender", alias: [], required: false }
]
Проверка правильности массива userFields с помощью информации, предоставленной в массиве primaryFields, и получение трех возможных выходных данных: первичные поля (объект),вторичные поля (массив), пропущенные поля (массив).Кроме того, пара предостережений, 1. userFields должны быть распознаны либо ключом или псевдонимом, и 2. ключ для первичных полей должен быть ключом, используемым в массиве primaryFields (если псевдоним используется в userFields).
Итаквышеприведенное должно вывести:
{
primary:{
name: "tyler",
address: "boston",
phone: "555-555-5555"
},
secondary: [
{key: "email", value: "tyler@test.com"}
],
missing: ["age"]
}
Вот суть, включающая мое решение: https://gist.github.com/tilersmyth/26984866d7428c9b502ec8971d961997
Базовый процесс:
- Цикл по полям пользователя дляобновить ключи на основе ключей PrimaryField (если используется псевдоним) и зарегистрировать эти ключи (для проверки обязательных)
- Проверить наличие пропущенных обязательных полей
- Определить оставшиеся пользовательские поля, которые будут выдаваться как дополнительные элементы
Любое понимание подхода, который может быть более эффективным?