如何在JavaScript中从对象数组匹配指定Key并返回目标对象数组?
JavaScript 属性匹配数组转换函数实现
需求回顾
需要实现一个函数,接收字符串类型的key和对象数组criteriaJson,返回一个新数组:
- 新数组每个元素是含固定键
criteria的对象 - 若对象存在
key对应的属性,criteria值为该属性值;否则为null - 处理三类场景:空数组返回
[null];单对象数组匹配/不匹配返回对应结果;多对象数组逐个匹配输出 - 限制:不可使用
for循环
实现代码
function transformCriteria(key, criteriaJson) { if (criteriaJson.length === 0) { return [null]; } return criteriaJson.map(obj => ({ criteria: obj.hasOwnProperty(key) ? obj[key] : null })); }
关键逻辑说明
- 空数组处理:直接判断数组长度为0时返回
[null],满足第一个场景要求 - 遍历替代方案:使用数组的
map方法遍历,完全替代for循环,符合限制条件 - 属性存在性检查:用
hasOwnProperty判断对象是否自身拥有目标key,避免误取继承自原型链的属性,确保结果准确 - 结果生成:每个遍历对象转换为指定格式的对象,自动适配单对象或多对象数组的场景
测试验证
- 场景1:空数组
transformCriteria('name', []); // 输出: [null]
- 场景2:单对象匹配成功
transformCriteria('age', [{ age: 28, city: 'London' }]); // 输出: [{ criteria: 28 }]
- 场景2:单对象匹配失败
transformCriteria('gender', [{ age: 28, city: 'London' }]); // 输出: [{ criteria: null }]
- 场景3:多对象混合匹配
transformCriteria('score', [{ score: 95 }, { name: 'Bob' }, { score: 88 }]); // 输出: [{ criteria: 95 }, { criteria: null }, { criteria: 88 }]
内容的提问来源于stack exchange,提问作者Jakub
相关产品推荐
相关产品推荐

