我正在尝试删除基于条件的“角色数组”中的一项,但此数组是json数组中的一项。此外,在查看角色数组之前,我还需要在父级别检查另一个条件。我尝试了lodash的find,以便首先在父级匹配第一个条件,但无法进一步进行下一级过滤。
我的json:
[ {"unitId": "2", name: "elizabeth", roles: [{ "role":{"roleId" : "2", roleName: "testing"}}, { "role":{"roleId" : "5", roleName: "dev"}}]},
{"unitId": "2", name: "peter", roles: [{ "role":{"roleId" : "1", roleName: "testing"}}, { "role":{"roleId" : "2", roleName: "dev"}}]}
]
预期结果:
[ {"unitId": "2", name: "elizabeth", roles: [{ "role":{"roleId" : "2", roleName: "testing"}}}]},
{"unitId": "2", name: "peter", roles: [{ "role":{"roleId" : "1", roleName: "testing"}}, { "role":{"roleId" : "2", roleName: "dev"}}]}
]
这里,我需要首先检查unitId: 2,然后删除unitId :2中roleId: 5所有角色
发布于 2018-10-23 02:54:24
您可以将map
& remove
与lodash一起使用:
const data = [{ unitId: "2", name: "elizabeth", roles: [{ "role": { "roleId": "2", roleName: "testing" } }, { "role": { "roleId": "5", roleName: "dev" } }] }, { unitId: "2", name: "peter", roles: [{ "role": { "roleId": "1", roleName: "testing" } }, { "role": { "roleId": "2", roleName: "dev" } }] } ]
const result = _.map(data, x => (_.isEqual(x.unitId, "2") ?
_.remove(x.roles, y => y.role.roleId == "5") : null, x))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
您还可以跳过lodash并执行以下操作:
const data = [{ unitId: "2", name: "elizabeth", roles: [{ "role": { "roleId": "2", roleName: "testing" } }, { "role": { "roleId": "5", roleName: "dev" } }] }, { unitId: "2", name: "peter", roles: [{ "role": { "roleId": "1", roleName: "testing" } }, { "role": { "roleId": "2", roleName: "dev" } }] } ]
const result = data.map(x => (x.roles = x.unitId == "2" ?
x.roles.filter(y => y.role.roleId != '5') : x.roles, x))
console.log(result)
使用map
和filter
https://stackoverflow.com/questions/52934923
复制相似问题