Vue对象赋值问题

思否 问答 已采纳 👍 2 含 AI 优化版

问题

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

有两个对象 obj1obj2,希望把 obj1 中与 obj2 相同字段名的值赋给 obj2(按 obj2 已有的键去 obj1 里取值覆盖),而不是简单的对象合并。

涉及技术

JavaScript 对象操作、Object.keys、(可选)Lodash

期望结果

得到一种按指定键从另一个对象取值赋值的写法。

回答

原始回答

obj1 = {a:1,b:2,c:3,d:4}

obj2 = {b:0,c:0};

Object.keys(obj2).forEach(key=>obj2[key]=obj1[key])通过编程解决呗。lodash 库也有对应的方法。

AI 优化 · 回答整理

解答思路

遍历 obj2 自身的键,用同名键去 obj1 中取值,逐一赋值覆盖即可。

示例代码

const obj1 = { a: 1, b: 2, c: 3, d: 4 };
const obj2 = { b: 0, c: 0 };

Object.keys(obj2).forEach((key) => {
  obj2[key] = obj1[key];
});

console.log(obj2); // { b: 2, c: 3 }

用 Lodash 也可以更简洁地实现类似效果:

import _ from 'lodash';

const result = _.pick(obj1, Object.keys(obj2));
// result: { b: 2, c: 3 }

详细说明

  • 关键是遍历顺序:以 obj2 的键为基准,而不是 obj1,这样才能保证只更新 obj2 已有的字段,其余字段(obj1 里的 ad)不会被带进来。
  • 如果不需要保留 obj2 原有引用,只是想拿到一个新对象,lodash_.pick(obj1, keys) 会更直观:从 obj1 中挑出指定键组成新对象。

小结

按指定键做“选择性赋值”,核心思路是「以目标对象的键为遍历基准」,原生 Object.keys().forEach()lodashpick 都能实现。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。