#javascript #json #data-structures #mapping
Вопрос:
Итак, у меня есть начальный объект JSON, полученный в результате вызова API. Мне нужно сопоставить эти данные со вторым объектом JSON, который затем будет использоваться приложением. Исходный объект из вызовов API выглядит примерно так…
const initialData = {
"PersonId": 1234,
"Surname": "Blogs",
"Forename": "Joe"
}
и это должно выглядеть так, чтобы быть потреблено передним концом…
{
"IdNumber": 1234,
"Last_name": "Blogs",
"First_name": "Joe"
}
Изначально я написал это…
const mappedData = (initialData) => {
return {
"IdNumber": initialData.PersonId,
"Last_name": initialData.Surname,
"First_name": initialData.Forename
}
}
Проблема в этом заключается в отсутствии гибкости. Если имя ключа в initialData нужно изменить (например, кто-то заходит в базу данных и решает, что имя должно быть первым именем), то данные, которые я получаю, больше не отображаются правильно, и мое приложение ломается.
Может ли кто-нибудь объяснить, как/если это можно сделать динамически?
Спасибо!
Комментарии:
1. все может сломаться, если вы начнете изменять значение вещей, вот почему вы устанавливаете протокол между вашей базой данных и вашим приложением. просто не меняй имена.
2. полностью согласен с вами, однако это обязательное условие. Я просто хочу сделать его как можно более надежным
3. Простой ответ заключается в том, что компьютер не понимает этого сценария. Но вы можете проверить наличие знакомых имен (например, проверить имена ключей, такие как Имя, Отчество, имя и т.д.) И соответствующим образом спроектировать свое приложение.
4. Вы можете экстернализировать отображение ключей в объектную переменную и заставить свою функцию полагаться на эту переменную, но у вас все равно будет та же проблема. Если внутренний ключ изменится, вам все равно нужно будет изменить его на своей карте.
Ответ №1:
Прежде всего, я бы посоветовал вам и людям из вашей команды не изменять имена записей в базе данных, и я не могу найти четкой причины, по которой кто-либо мог бы это сделать. Однако, если вы все же хотите изменить имена, лучше всего было бы изменить имена записей как в интерфейсе, так и в бэкэнде.
Если вы все еще хотите делать это динамически, хорошим способом было бы:
- Используйте метод JavaScript Object.keys (), чтобы получить ключи объекта.
- Сопоставьте значения объекта с их новыми именами значений
Это было бы примером:
function changeObjectNames(initialData) {
const keys = Object.keys(initialData);
return {
"IdNumber": initialData[keys[0]],
"Last_name": initialData[keys[1]],
"First_name": initialData[keys[2]]
}
}
С моим предлагаемым решением есть проблема: данные могут отображаться в неправильном порядке. На данный момент это лучший ответ, который я могу дать. Поэтому я бы посоветовал вам не пытаться изменять имена записей базы данных, если это не является абсолютно необходимым.
Комментарии:
1. Это надежный ответ, основанный на их требованиях, но он хуже, чем то, что они делают в настоящее время (по причинам, которые вы объяснили относительно заказа). Поэтому я не рекомендую этого делать.
2. Я полностью согласен с тобой, Линда. Я бы не рекомендовал это делать и не использовал в производстве.
3. Спасибо, Арнольд. Я также придерживался этой идеи и ценю ответ, однако, как вы заявили, данные могут отображаться в другом порядке, поэтому я не могу принять это как ответ