是否可以向对象数组中的过滤对象添加额外的 属性?

Is it possible to add additional property to to filtered objects from an array of objects?

我有一个这样的对象:

{
  "roleId": "75f6af0f-a483-4ad1-af5f-5802887fe5e6",
  "roleClaims": [
    {
      "type": "Permissions",
      "value": "Permissions.Brands.View",
      "selected": false
    },
    {
      "type": "Permissions",
      "value": "Permissions.Brands.Create",
      "selected": false
    },
    {
      "type": "Permissions",
      "value": "Permissions.Dashboard.Create",
      "selected": false
    }, 
    {
      "type": "Permissions",
      "value": "Permissions.Users.Create",
      "selected": false
    }
  ]
}

我想重新组织 roleClaims 数组 [就像每个唯一类型的对象(值 = "Permissions.Brands.View" > Brands )是单独的数组] 如下所述。并且另外添加一个额外的 属性 checkboxId (该值是唯一的数字)到对象数组中的过滤对象。 真的可以吗?

{
  "roleId": "75f6af0f-a483-4ad1-af5f-5802887fe5e6",
  "roleClaims": [
    {
      "valueId": "a8ca7eac-4f18-42d6-983f-44f6a8e157dc",
      "valueType": "Brands",
      "valueArray": [
        {
          "checkboxId": uuidv4(), // create new unique id
          "type": "Permissions",
          "value": "Permissions.Brands.View",
          "selected": false
        },
        {
          "checkboxId": uuidv4(),,
          "type": "Permissions",
          "value": "Permissions.Brands.Create",
          "selected": false
        }
      ]
    },
    {
      "valueId": "a2566fd4-8763-41d4-881e-029851a440fd",
      "valueType": "Dashboard",
      "valueArray": [
        {
          "checkboxId": uuidv4(),,
          "type": "Permissions",
          "value": "Permissions.Dashboard.Create",
          "selected": false
        }
      ]
    },
    {
      "valueId": "72328955-2bd2-469c-a094-be0bba383edd",
      "valueType": "Users",
      "valueArray": [
        {
          "checkboxId": uuidv4(),,
          "type": "Permissions",
          "value": "Permissions.Users.Create",
          "selected": false
        }
      ]
    }
  ]
}

我试过这个:

  const getRoleDetailsByRoleId = roleId => {
    axios.get(`${urls.account.permissions.get_all_by_roleId}?roleId=${roleId}`).then(res => {
      const permissionData = res.data;
      const splitedValues = [];
      permissionData.roleClaims.forEach(item => splitedValues.push(item.value.split('.')[1]));
      const uniqueValues = [...new Set(splitedValues)];
      const modifiePermissiondObj = {
        roleId: permissionData.roleId,
        roleClaims: uniqueValues.map(item => ({
          valueId: uuidv4(),
          valueType: item,
          valueArray: permissionData.roleClaims.filter((fileredItem, index, arr) => fileredItem.value.split('.')[1] === item)
        }))
      };
      setPermissions(modifiePermissiondObj);
      setIsPageLoaded(true);
    });
  };

我修改了 roleClaims 数组,但无法添加额外的 属性。 如果可能请帮助我。

您只需要像这样映射您的 valueArray

valueArray: permissionData.roleClaims
       .filter((fileredItem, index, arr) => fileredItem.value.split('.')[1] === item)
       .map(value => ({...value, checkboxId: uuidv4()}))

const permissionData = {
  "roleId": "75f6af0f-a483-4ad1-af5f-5802887fe5e6",
  "roleClaims": [
    {
      "type": "Permissions",
      "value": "Permissions.Brands.View",
      "selected": false
    },
    {
      "type": "Permissions",
      "value": "Permissions.Brands.Create",
      "selected": false
    },
    {
      "type": "Permissions",
      "value": "Permissions.Dashboard.Create",
      "selected": false
    }, 
    {
      "type": "Permissions",
      "value": "Permissions.Users.Create",
      "selected": false
    }
  ]
}

const transformedPermissionData = permissionData.roleClaims.reduce((newOutput, role) => {
   const extractedRole = role.value.split('.')[1];
   const roleIndex = newOutput.roleClaims.findIndex(output => output && output.valueType === extractedRole)
   if(roleIndex !== -1){
       newOutput.roleClaims[roleIndex].valueArray.push({...role, checkboxId: 'UUID'})
   }else {
     newOutput.roleClaims.push({
       valueId: 'UUID',
       valueType: extractedRole,
       valueArray: [{...role, checkboxId: 'UUID'}]
     })
   }
  
  return newOutput
  
}, { roleId: permissionData.roleId, roleClaims: []})


console.log(transformedPermissionData)