如何基于属性名称破坏对象数组需要映射值

问题描述 投票:0回答:1

我具有服务器响应的以下指定格式,我需要将基于字段名称的值映射到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
      }
  ];

谁能提供更好的解决方案

javascript angular typescript ecmascript-6 es6-class
1个回答
0
投票

仅编写一个将其转换为对象的函数?

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

在数组上调用它,您将有一个键值对象,可以根据需要访问。或者您可以根据需要在表格上调用resetsetValuepatchValue

this.userForm.reset(formArrayToObject(this.form))
© www.soinside.com 2019 - 2024. All rights reserved.