![](/img/trans.png)
[英]Adding a property inside an object that has been filtered from an array of objects
[英]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.