如何从对象数组中提取指定空属性(role/group/subgroup)及对应ID?
问题描述
给定如下对象数组:
let tempdata = [ { "id": 41, "tool": "Artifactory", "role": "", "group": "Dish", "subgroup": "Ehub test 009", "subscriptionId": "artifactory-ehub-test-009" }, { "id": 4, "tool": "Gitlab", "role": "Owner", "group": "IDP", "subgroup": "IDP-Service-Templates", "subscriptionId": "gitlab-51663585" } ]
需求:筛选出role、group、subgroup任一属性为空的项,同时返回该项的id以及所有为空的属性名称列表,期望输出格式为:
[{"id":41,"blank_properties":["role"]}]
现有代码仅能获取符合条件的id数组[41],无法满足完整需求:
tempdata.filter(item=>item.group=='' || item.subgroup=='' || item.role=='').map(item=>item.id)
解决方案
可以通过以下代码实现需求:
const tempdata = [ { "id": 41, "tool": "Artifactory", "role": "", "group": "Dish", "subgroup": "Ehub test 009", "subscriptionId": "artifactory-ehub-test-009" }, { "id": 4, "tool": "Gitlab", "role": "Owner", "group": "IDP", "subgroup": "IDP-Service-Templates", "subscriptionId": "gitlab-51663585" } ]; // 定义需要检查的目标属性集合 const targetProperties = ['role', 'group', 'subgroup']; const result = tempdata // 筛选出至少有一个目标属性为空的项 .filter(item => targetProperties.some(prop => item[prop] === '')) // 构造包含id和空属性列表的对象 .map(item => { // 收集当前项中所有为空的目标属性名称 const blankProps = targetProperties.filter(prop => item[prop] === ''); return { id: item.id, blank_properties: blankProps }; }); console.log(result);
逻辑说明
- 定义目标属性集合:将需要检查的
role、group、subgroup存入数组,便于后续统一处理,也方便后续修改检查的属性。 - 筛选符合条件的项:使用
Array.some()判断当前项是否存在目标属性为空的情况,筛选出符合要求的条目。 - 构造结果结构:对每个筛选出的条目,使用
Array.filter()收集所有为空的目标属性名称,再组合成包含id和blank_properties的对象。
内容的提问来源于stack exchange,提问作者Nirmesh Rastogi
相关产品推荐
相关产品推荐

