Skip to content

Instantly share code, notes, and snippets.

@Otto-Vector
Last active November 21, 2021 20:51
Show Gist options
  • Save Otto-Vector/0751aa81f8e47193b713fb183dc35181 to your computer and use it in GitHub Desktop.
Save Otto-Vector/0751aa81f8e47193b713fb183dc35181 to your computer and use it in GitHub Desktop.
errorParserStringsArrayToObject
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