You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何从多对象生成含指定键的单一对象(缺省值补全)

实现按指定属性列表构建新对象的方案

嘿,我来帮你搞定这个需求!要根据指定的属性数组props从现有对象里提取对应值,不存在的属性填充默认值(比如null),其实有几种简洁的实现方式,我给你一步步拆解:

方法1:使用Array.reduce(灵活通用)

reduce是处理这类对象构建场景的常用工具,我们可以遍历props数组,逐个从目标对象中取值,不存在的键就用默认值填充:

const props = ["name", "price", "qty", "category"];
const obj_1 = { name: "Product_1", price: 120, category: 'phone' };
const obj_2 = { name: "Product_2", price: 7893, category: 'program_eq', qty: 5 };

// 构建obj_1对应的final_obj
const final_obj_1 = props.reduce((result, key) => {
  // 用空值合并运算符判断:存在且不为null/undefined则用原值,否则设为null
  result[key] = obj_1[key] ?? null;
  return result;
}, {});

// 构建obj_2对应的final_obj
const final_obj_2 = props.reduce((result, key) => {
  result[key] = obj_2[key] ?? null;
  return result;
}, {});

console.log(final_obj_1);
// 输出:{ name: "Product_1", price: 120, qty: null, category: 'phone' }
console.log(final_obj_2);
// 输出:{ name: "Product_2", price: 7893, qty: 5, category: 'program_eq' }

细节说明:

  • 如果你的属性值可能是0、''、false这类合法假值,不想被默认值覆盖,可以换成更严谨的判断:
    result[key] = typeof obj_1[key] !== 'undefined' ? obj_1[key] : null;
    
  • 要替换成其他默认值(比如0或空字符串),直接把null改成你需要的值就行。

方法2:使用Object.fromEntries(更简洁)

如果你喜欢更紧凑的代码,可以用Object.fromEntries配合map来实现,逻辑和上面一致,但写法更短:

const final_obj_1 = Object.fromEntries(
  props.map(key => [key, obj_1[key] ?? null])
);

const final_obj_2 = Object.fromEntries(
  props.map(key => [key, obj_2[key] ?? null])
);

这个方法的核心是:map把props里的每个键转换成[key, value]的二维数组,再通过Object.fromEntries直接转换成目标对象。

总结

两种方法都能完美满足你的需求:

  • 如果你需要在构建过程中添加额外逻辑(比如对某些属性做特殊处理),选reduce更灵活;
  • 如果你只是单纯提取属性,Object.fromEntries的写法更简洁直观。

内容的提问来源于stack exchange,提问作者jsDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:25:31