如何从Audit对象中按指定字段列表提取目标字段?
高效过滤对象指定字段的解决方案
嘿,我懂你不想写一堆if判断或者绕弯路的心情,针对你从Audit对象中提取指定字段的需求,这里有两个简洁又高效的原生JavaScript方案,完全能解决你的问题:
准备工作:先定义你的原始数据
const audit = { "sendDate": "11/11/2017", "id": "1", "user": "name1", "role": "admin", "auditType": "download", "points": 3 }; const desiredFields = ["sendDate", "id", "auditType"];
方案1:使用Array.reduce()(灵活且兼容性好)
这个方法可以帮你遍历目标字段列表,逐步构建出只包含需要字段的新对象,还能轻松添加字段存在性校验:
const filteredAudit = desiredFields.reduce((result, field) => { // 可选:确保原对象确实有这个字段,避免意外添加undefined属性 if (audit.hasOwnProperty(field)) { result[field] = audit[field]; } return result; }, {}); // 输出结果:{ "sendDate": "11/11/2017", "id": "1", "auditType": "download" }
方案2:使用Object.fromEntries()(更简洁的ES2019+写法)
如果你项目环境支持ES2019及以上,这个写法会更清爽,一行就能搞定:
const filteredAudit = Object.fromEntries( desiredFields.map(field => [field, audit[field]]) );
如果担心有些字段可能不存在于原对象中,可以再加一层过滤:
const filteredAudit = Object.fromEntries( desiredFields .filter(field => audit.hasOwnProperty(field)) .map(field => [field, audit[field]]) );
为什么这两个方案更好?
- 时间复杂度都是O(n)(n是目标字段列表的长度),效率拉满;
- 完全原生,不需要引入任何第三方库;
- 代码简洁易读,维护成本低,比一堆
if或者手动赋值优雅太多。
内容的提问来源于stack exchange,提问作者Jo Dung
相关产品推荐
相关产品推荐

