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

如何在JavaScript中遍历两对象并匹配键更新目标对象值

解决对象属性匹配填充问题

先明确你原代码的核心错误:

  • 对象没有length属性,task.length和data.length都是undefined,循环根本不会执行
  • 用==比较Object.keys返回的数组,数组是引用类型,只有引用完全相同时才会相等,这里永远为false
  • Object.values(task) = Object.values(data)是错误赋值方式,Object.values返回的是值的副本数组,修改它不会影响原对象
  • 内层循环变量写错,把n++写成了a++,就算循环执行也会触发死循环

正确实现方式(修改原task对象)

task是const声明的,但对象的属性可以修改(const仅限制变量的引用,不限制对象内部属性)。我们可以遍历task的所有键,检查taskData中是否存在该键,存在则赋值:

// 获取task的所有属性键
const taskKeys = Object.keys(task);

// 遍历每个键,匹配赋值
taskKeys.forEach(key => {
  // 用hasOwnProperty确保是taskData自身的属性,避免继承属性干扰
  if (taskData.hasOwnProperty(key)) {
    task[key] = taskData[key];
  }
});

// 查看填充后的结果
console.log(task);

不修改原对象,生成新对象的方式

如果不想改变原task对象,可以创建新对象存储结果:

// 先复制task的所有属性,再用taskData中匹配的属性覆盖
const filledTask = { ...task };

Object.keys(filledTask).forEach(key => {
  if (taskData.hasOwnProperty(key)) {
    filledTask[key] = taskData[key];
  }
});

console.log(filledTask);

或者用更简洁的链式写法:

const filledTask = {
  ...task,
  ...Object.fromEntries(
    Object.keys(task)
      .filter(key => taskData.hasOwnProperty(key))
      .map(key => [key, taskData[key]])
  )
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:41:05