Как для уничтожения массива объекта на основе имени свойства необходимо сопоставить значение - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть указанный ниже формат ответа от сервера, мне нужно сопоставить значения, основанные на именах полей, с именами formcontrol.

let userForm= ths.formbuilder.group({
firstName:[],
lastName:[],userName:[],
});

из службы, мне нужно деструктурировать нижеприведенный ответ,

Здесь я получаю точные значения, основанные на свойстве, но мне нужно сделать для каждого свойства

let firstName= this.form.find(
  items=>   items.fieldName === 'firstName').fieldValue

 let  getUserName = this.form.find(items=>items.userName ==='userName').value


  console.log(firstName,getUserName,'test');

}

ответ службы должен отображаться для формирования модели элемента управления на основе имени поля.

   form:any =[
      {
          fieldName: 'firstName',
          fieldValue: 'johns smith',
          isVisible: true,
          isValidationEnabled: true
      },
      {
          fieldName: 'userName',
          fieldValue: 'admins',
          isVisible: true,
          isValidationEnabled: true
      },
      {
          fieldName: 'documentType',
          fieldValue: 'Invoice',
          isVisible: true,
          isValidationEnabled: true
      }
  ];

может кто-нибудь предложить лучшее решение

1 Ответ

2 голосов
/ 21 апреля 2020

просто написать функцию для преобразования ее в объект?

function formArrayToObject(formArray: {fieldName: string, fieldValue: string}[]) {
  return formArray.reduce((acc, val) => {
    return Object.assign(acc, {[val.fieldName]: val.fieldValue});
  }, {});
}

вызовите это в вашем массиве, и вы получите объект со значением ключа, к которому вы сможете обращаться по мере необходимости. или вы можете позвонить reset или setValue или patchValue в соответствии с вашей формой:

this.userForm.reset(formArrayToObject(this.form))
...