如何用一行JS代码从对象中提取指定属性生成新对象
实现方案
你可以直接用ES2019及以上标准支持的Object.fromEntries方法,一行实现需求:
const filtered = Object.fromEntries(fields.map(field => [field, obj[field]]))
逻辑说明
- 先遍历
fields数组,把每个指定字段转为[字段名, 原对象对应属性值]格式的键值对数组 - 再通过
Object.fromEntries直接把键值对数组转为新对象,刚好得到仅包含指定属性的结果。
你之前写法的问题
你给出的Object.keys(fields).map(e => fields[e])逻辑只做了一件事:遍历数组fields的索引,重新生成了一份和fields完全一致的新数组,全程没有关联到要提取属性的原对象obj,自然无法实现提取属性的效果。
健壮性兼容版本
如果fields中可能存在原对象没有的属性,且你不希望这些属性出现在最终结果中,可以加一层过滤逻辑:
const filtered = Object.fromEntries( fields .filter(field => obj.hasOwnProperty(field)) .map(field => [field, obj[field]]) )
内容的提问来源于stack exchange,提问作者Martyn Ball
相关产品推荐
相关产品推荐

