如何用现代JavaScript按指定键提取对象字段并忽略undefined值
实现方案
可以使用 ES2019 引入的 Object.fromEntries 配合数组方法写出非常简洁的现代JS版本,不需要手动维护中间对象:
function denormalizeUserData(userData, ...fields) { return Object.fromEntries( fields // 把每个字段转为 [键, 值] 二元数组,符合 Object.fromEntries 的入参格式 .map(key => [key, userData[key]]) // 过滤掉值为 undefined 的项,不会误过滤 0、false、空字符串等合法假值 .filter(([_, value]) => value !== undefined) ) }
测试效果
const userData = { avatar: undefined, name: "Raul", username: "raulito", celebrity: true } // 测试1 console.log(denormalizeUserData(userData, "avatar", "name")) // 输出:{ name: "Raul" } // 测试2 console.log(denormalizeUserData(userData, "celebrity", "name", "avatar")) // 输出:{ celebrity: true, name: "Raul" }
更精简的箭头函数写法
如果不需要函数内部的this绑定,还可以直接写成箭头函数:
const denormalizeUserData = (userData, ...fields) => Object.fromEntries( fields.map(k => [k, userData[k]]).filter(([_, v]) => v !== undefined) )
内容的提问来源于stack exchange,提问作者Raul
相关产品推荐
相关产品推荐

