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

如何使用Object.assign通过转换层将两个对象生成新对象?

用Object.assign实现对象转换的方案

嘿,这个需求用Object.assign完全可以搞定,我先给你梳理下思路,再配上具体的代码示例,你一看就明白~

首先咱们先明确下场景,用示例数据更直观:
假设你的两个对象是这样的:

// 包含id的源对象
const mapObj = {
  product1: { id: 'apple', price: 5 },
  product2: { id: 'banana', price: 3 },
  product3: { id: 'orange', price: 4 }
};

// 键为id、值为对应内容的参考对象
const refer = {
  apple: '红富士苹果',
  banana: '广西香蕉'
};

你的需求是:生成一个新对象,当mapObj里某个条目的id和refer的键匹配时,就用refer对应的值替换该条目;不匹配的话可以选择保留原条目或者忽略,下面分两种情况给你实现:

情况1:保留所有条目,匹配的替换值,不匹配的保留原内容

const transformedObj = Object.assign(
  {}, // 目标空对象,用来接收合并后的结果
  ...Object.entries(mapObj).map(([key, item]) => {
    // 检查当前item的id是否在refer中有对应值
    const targetValue = refer[item.id];
    // 返回一个仅包含当前key的小对象,值根据匹配情况选择
    return { [key]: targetValue !== undefined ? targetValue : item };
  })
);

console.log(transformedObj);
// 输出结果:
// {
//   product1: '红富士苹果',
//   product2: '广西香蕉',
//   product3: { id: 'orange', price: 4 }
// }

情况2:仅保留匹配的条目,不匹配的直接剔除

const transformedObj = Object.assign(
  {},
  ...Object.entries(mapObj).map(([key, item]) => {
    const targetValue = refer[item.id];
    // 如果匹配到值就返回带key的对象,否则返回空对象(不会添加任何属性)
    return targetValue !== undefined ? { [key]: targetValue } : {};
  })
);

console.log(transformedObj);
// 输出结果:
// {
//   product1: '红富士苹果',
//   product2: '广西香蕉'
// }

核心逻辑解释:

  • 用Object.entries(mapObj)把mapObj转换成键值对数组,方便遍历每个条目;
  • 通过map方法把每个条目转换成一个仅包含当前key的小对象:匹配到refer的值就用该值,否则根据需求返回原内容或空对象;
  • 用展开运算符...把这些小对象作为参数传给Object.assign,它会自动把所有小对象的属性合并到第一个空对象里,最终得到我们需要的新对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:33