簡體   English   中英

是否可以向對象數組中的過濾對象添加其他屬性?

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

我有一個像這樣的 object:

{
  "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 (其值是唯一編號)從對象數組中過濾 object 。 真的有可能嗎?

{
  "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數組,但無法添加附加屬性。 如果可能,請幫助我。

 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)

你只需要像這樣 map 你的valueArray

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM