Извлечение определенных значений с тем же именем параметра из конечной точки

#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));