#angular
#angular
Вопрос:
У меня есть конечная точка, которая возвращает мне набор данных. Я пытаюсь извлечь только schemeNo
из этого. Данные могут иметь один или несколько schemeNo
.
Вот данные. schemeNo
Находится внутри retirementData
набора
{
"id": "2193e640-d97c-4952-a8a4-9aa250db364a",
"parentCorporate": null,
"statusId": 2,
"primaryColour": "#001aff",
"riskData": "{"packages":[{"id":0,"isMaxInCurrency":false,"max":10.0,"name":"Dual Risk","riskPackageCoverId":0,"riskPackageCoverName":null,"packageCovers":null,"isPaidFromRetirementContributions":false,"isEnabled":false}]}",
"retirementData": "{"benefits":[{"availableBenefitOptions":{"anniversaryDate":"2020-11-17T22:00:00Z","hasPensionBackedHomeLoan":false,"retirementAge":65,"schemeName":"Dual Alexander Forbes Retirement Fund Pension Base Fund","schemeNo":"1590"},"contribution":{"anniversaryDate":null,"employerContributions":null,"hasEmployerContribution":false,"hasMemberContribution":true,"hasVoluntaryContribution":false,"memberContributions":[5.0],"voluntaryContributions":null},"investmentStrategy":{"defaultOptionId":0.0,"hasClarity":null,"hasSinglePortfolio":true,"isComprehensive":null,"isLifestage":null,"lifestage":null,"portfolioOptionId":null,"defaultLabelName":"Single portfolio – Real Return Focus"},"qualifyingMembers":{"hasContract":false,"hasDisabilityClaims":false,"isFullTime":true,"isOverRetirementAge":false,"isPartTime":false,"isPermanent":false,"isUnderRetirementAge":false}},{"availableBenefitOptions":{"anniversaryDate":"2020-11-24T22:00:00Z","hasPensionBackedHomeLoan":false,"retirementAge":65,"schemeName":"Dual Alexander Forbes Retirement Fund Pension Base Fund","schemeNo":"2421"},"contribution":{"anniversaryDate":null,"employerContributions":null,"hasEmployerContribution":false,"hasMemberContribution":true,"hasVoluntaryContribution":false,"memberContributions":[7.0],"voluntaryContributions":null},"investmentStrategy":{"defaultOptionId":0.0,"hasClarity":null,"hasSinglePortfolio":true,"isComprehensive":null,"isLifestage":null,"lifestage":null,"portfolioOptionId":null,"defaultLabelName":"Single portfolio – Real Return Focus"},"qualifyingMembers":{"hasContract":false,"hasDisabilityClaims":false,"isFullTime":true,"isOverRetirementAge":false,"isPartTime":false,"isPermanent":false,"isUnderRetirementAge":false}}],"fundSalaryOptions":[5.0]}",
"createdDate": "2020-11-10T06:32:27.54Z",
"modifiedDate": "2020-11-10T06:32:27.54Z",
"subGroups": []
}
Я попробовал следующее, но он возвращает только первое schemeNo
console.log(JSON.parse(resp["retirementData"])["benefits"]["0"].availableBenefitOptions.schemeNo);
Если я удалю [0]
его, появится неопределенная ошибка
Комментарии:
1. Вы должны использовать
map
там функцию :["benefits"].map(r=> r.availableBenefitOptions.schemeNo)
2. спасибо, вы можете указать is в качестве ответа, который я отмечу правильным
Ответ №1:
Ну, поскольку benefits
свойство представляет собой массив, и существует вероятность, что оно может содержать более 1 значения, тогда вы должны использовать Array.map
вместо индексированного доступа. Итак, ваш код должен выглядеть следующим образом :
console.log(
JSON.parse(
resp["retirementData"])["benefits"].map(r=> r.availableBenefitOptions.schemeNo));