Vue对象赋值问题
思否 问答 已采纳 👍 2 含 AI 优化版
问题
Vue对象赋值问题
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
有两个对象 obj1 和 obj2,希望把 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里的a、d)不会被带进来。 - 如果不需要保留
obj2原有引用,只是想拿到一个新对象,lodash的_.pick(obj1, keys)会更直观:从obj1中挑出指定键组成新对象。
小结
按指定键做“选择性赋值”,核心思路是「以目标对象的键为遍历基准」,原生 Object.keys().forEach() 或 lodash 的 pick 都能实现。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault