从对象中删除项目然后保存它

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

我会尽力解释这一点。 我的表单中有一个选择,用户可以在多个合同之间进行选择,一旦他选择其中一个,我想在保存之前从所选合同中删除项目。

合约有 ID、姓名等......以及角色列表,目前我希望能够在该列表中仅保留一个角色,因此我必须在保存之前删除其他角色。

这是我的选择:

<v-autocomplete
   v-model="contract"
   :items="contractsData"
   item-text="name"
   hide-details="auto"
   light
   solo
   dense
   clearable
   return-object
></v-autocomplete>

此处选择的合约是一个如下所示的对象:

{
    "id": "id-contract-001",
    "name": "contract1",
    "roles": [
      {
        "id": "id-role-001",
        "name": "admin",
        "description": "can view, create, update & delete"
      },
      {
        "id": "id-role-002",
        "name": "operator",
        "description": "can view & create"
      },
      {
        "id": "id-role-003",
        "name": "user",
        "description": "can only view"
      }
    ]
},

这是我尝试只保留我想保留的角色的方法:

getContractUserRole(contract) {
  let rolesList = contract.roles
  rolesList.forEach((role) => {
    if (role.name === 'user') {
      this.contract = {
        id: contract.id,
        name: contract.name,
        roles: [
          {
            id: role.id,
            name: role.name,
            description: role.description,
          },
        ],
      }
    }
  })
},

我在我的帖子请求中调用这个方法:

await this.$axios
          .$post(uri, {
            username: this.username,
            firstname: this.firstname,
            lastname: this.lastname,
            email: this.email,
            password: this.password,
            contracts: this.getContractUserRole(this.contract),

我必须补充一点,我不能只将

role.id
role.name
放入我想要保留的角色中,因为在每个合同中
role.id
都是不同的,所以我必须在所选合同中搜索角色。

当我尝试使用此方法时,我收到错误

Cannot read properties of undefined (reading 'forEach')
,我知道我的所有合同都有角色,所以我不明白到底缺少什么?也许我的方法不是最好的,有谁知道我可以做到这一点的最佳方法吗?

编辑:为问题添加更多详细信息。

vue.js vuejs2
1个回答
0
投票

如果您只是想更改发布数据,请尝试以下功能。

getContractUserRole(contract) {
  let rolesList = contract.roles
  const res = {
    id: contract.id,
    name: contract.name,
    roles: []
  }
  rolesList.forEach((role) => {
    if (role.name === 'user') {
      res.roles.push(role)
    }
  })
  return res
}




 
© www.soinside.com 2019 - 2024. All rights reserved.