Last active
November 21, 2021 20:51
-
-
Save Otto-Vector/0751aa81f8e47193b713fb183dc35181 to your computer and use it in GitHub Desktop.
errorParserStringsArrayToObject
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const errorParser = errorStringArray => { | |
// c сервера приходят ошибки в таком формате | |
// errorStringArray = [ | |
// "The AboutMe field is required. (AboutMe)", | |
// "Invalid url format (Contacts->Twitter)", | |
// "Invalid url format (Contacts->Youtube)", | |
// "Invalid url format (Contacts->Vk)" | |
// ] | |
//убираем первую заглавную букву из названий будущих полей переменных | |
const unCapitalizeFirstChar = string => string.charAt(0).toLowerCase() + string.slice(1) | |
//удаление последнего символа | |
const deleteLastChar = string => string.slice(0,-1) | |
//запускаем редюсер по массиву и возвращаем объект в result | |
return errorStringArray.reduce((result, value) => { | |
//разделяем строку на сообщение (до скобки) и переменную (после) | |
//удаляем последнюю скобку и последний пробел | |
const [errorMessage, variablesField] = value.split('(').map(deleteLastChar) | |
//если в строке есть стрелочка, то создаём вложенный объект | |
if (variablesField.includes('->')) { | |
//создаём две переменные в которые передаём строки без первой заглавной | |
const [firstLevel, secondLevel] = variablesField.split('->').map(unCapitalizeFirstChar) | |
return {...result, | |
[firstLevel]: { | |
...result[firstLevel], | |
[secondLevel]: errorMessage | |
} | |
} | |
} | |
//иначе просто наименование поля и ошибка | |
return {...result, [unCapitalizeFirstChar(variablesField)]: errorMessage} | |
},{} //объявление пустого объекта, как инициализация первого значения result | |
) | |
// возвращаются в таком формате | |
// return { | |
// aboutMe: 'The AboutMe field is required.', | |
// contacts: { | |
// twitter: 'Invalid url format', | |
// youtube: 'Invalid url format', | |
// vk: 'Invalid url format' | |
// } | |
// } | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment