Чтобы начать, я новичок в AngularJS с некоторым знакомством с узлом/Javascript, но с программированием на 25 лет. Я поддерживаю AngularJS SPA и многому научился, однако есть некоторые вещи, которые я не совсем понимаю, и не знаю, является ли это вещь AngularJS, вещь JSON или JavaScript.JSON Array vs Объекты в AngularJS
В настоящее время данные SPA жестко закодированы в файле JSON, который загружается $http.get
в файл. Теперь мне нужно создать настоящий API, который SPA будет призывать к этим данным.
Что озадачивает меня это структура закодированных данных, вот пример
{
"userId": "string",
"firstName": "string",
"lastName": "string",
"phoneNumber": 1234567890,
"phoneExtention": 123,
"faxNumber": 1234567890,
"email": "[email protected]",
"providers": {
"1386664670": {
"firstName": "string",
"middleInitial": "c",
"lastName": "string",
"description": "string",
"location": [{
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}]
},
"1548223027": {
"firstName": "string",
"middleInitial": "c",
"lastName": "string",
"description": "string",
"location": [{
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}, {
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}]
},
"1336340579": {
"firstName": "string",
"middleInitial": "c",
"lastName": "string",
"description": "string",
"location": [{
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}, {
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}]
}
}
}
что странно для меня является то, что providers
представляет собой совокупность объектов, где ID это имя объекта , Я бы подумал, что вы хотели бы, чтобы providers
быть массивом, ну, поставщиков, как это:
{
"userId": "string",
"firstName": "string",
"lastName": "string",
"phoneNumber": 1234567890,
"phoneExtention": 123,
"faxNumber": 1234567890,
"email": "[email protected]",
"providers": [{
"npi": "1386664670",
"firstName": "string",
"middleInitial": "c",
"lastName": "string",
"description": "string",
"location": [{
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}]
}, {
"npi": "1548223027",
"firstName": "string",
"middleInitial": "c",
"lastName": "string",
"description": "string",
"location": [{
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}, {
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}]
}, {
"npi": "1336340579",
"firstName": "string",
"middleInitial": "c",
"lastName": "string",
"description": "string",
"location": [{
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}, {
"locationId": 123456789,
"name": "string",
"address": "string",
"city": "string",
"state": "string",
"postalCode": "string",
"phone": 1234567890
}]
}]
}
Оба содержат те же данные, что только доступ к другому. Я просто собирался переопределить JSON, но я подумал, что лучше понять, почему это было сделано так, как это было раньше. В HTML/AngularJS данные итерируемая над помощью:
<md-tab ng-repeat="(key, value) in vm.providerInfo">
<md-tab-label>
{{vm.providerInfo[key].firstName}} {{vm.providerInfo[key].lastName}}
</md-tab-label>
Но я думаю, что я мог бы так же легко использовать этот код:
<md-tab ng-repeat="provider in vm.providerInfo">
<md-tab-label>
{{provider.firstName}} {{provider.lastName}}
</md-tab-label>
, если я изменил структуру данных, как описано выше.
Может ли кто-нибудь указать, почему я не хочу менять структуру JSON на массив поставщиков?
Не знаете, почему они решили это сделать. В этом случае я бы также использовал массив объектов, как привязанный к структуре объекта. Обычно массивы являются предпочтительным методом, поскольку они сохраняют порядок, когда объект, подобный тому, как оригинал не гарантирует, что заказ будет сохранен. Единственная причина, по которой я мог бы думать, что они будут делать это, было бы проще обратиться к провайдеру, просто указав $ obj-> providerId, чтобы найти поставщика, как вы бы сделали с картой. С массивом вам понадобится поиск массива для ключа, но на самом деле это сделать не сложно. – Gordnfreeman
Я проголосовал за закрытие слишком широко, потому что есть много причин, по которым они могли бы структурировать это так. С помощью структуры объектов вы можете быстро проверить, существует ли конкретный провайдер, но у вас нет естественного порядка, поэтому вы можете сортировать его для отображения. Также вы можете легко добавлять, удалять или заменять элементы (например, сервер может отправлять вам элементы по мере их изменения, но только измененные элементы и их намного проще объединить их таким образом). – Duncan
«Не знаю, является ли это вещь AngularJS, вещь JSON или вещь JavaScript». Я думаю, что это ничто из этого. Обе структуры, которые вы описываете, одинаково действительны по разным причинам, и выбор реализации данных так или иначе не будет зависеть от рассматриваемых структур. – Claies