首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lodash:根据条件在多级Json中查找和删除项目

Lodash:根据条件在多级Json中查找和删除项目
EN

Stack Overflow用户
提问于 2018-10-23 01:44:21
回答 1查看 84关注 0票数 0

我正在尝试删除基于条件的“角色数组”中的一项,但此数组是json数组中的一项。此外,在查看角色数组之前,我还需要在父级别检查另一个条件。我尝试了lodash的find,以便首先在父级匹配第一个条件,但无法进一步进行下一级过滤。

我的json:

代码语言:javascript
复制
[ {"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"}}]}
]

预期结果:

代码语言:javascript
复制
[ {"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所有角色

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 02:54:24

您可以将map & remove与lodash一起使用:

代码语言:javascript
复制
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)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

您还可以跳过lodash并执行以下操作:

代码语言:javascript
复制
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)

使用mapfilter

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52934923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档