Javascript 比较两个对象并用相同的键替换值-保留/忽略其余值

Javascript 比较两个对象并用相同的键替换值-保留/忽略其余值,javascript,typescript,object,Javascript,Typescript,Object,我尝试合并两个对象,但没有真正合并。我只想替换共同键的值-忽略其余的 obj1 = { a: 'replace a', b: 'keep b' } obj2 = { a: 'new value a', c: 'ignore c' } 预期结果: console.log(obj1) // { a: 'new value a', b: 'keep b' } 我尝试了一些不同的方法,比如: for (const [k, v] of Object.entries(obj2)) {

我尝试合并两个对象,但没有真正合并。我只想替换共同键的值-忽略其余的

obj1 = { a: 'replace a', b: 'keep b' }

obj2 = { a: 'new value a', c: 'ignore c' }
预期结果:

console.log(obj1)       
// { a: 'new value a', b: 'keep b' }
我尝试了一些不同的方法,比如:

for (const [k, v] of Object.entries(obj2)) {
   obj1[k] = v
}
但这并不是我想要的。并不断得到这种类型的错误:

元素隐式具有“any”类型,因为表达式的类型为 “字符串”不能用于索引类型。。。没有带有 在类型上找到了类型为“string”的参数


您可以使用这种方法

obj1={a:'替换a',b:'保留b'}
obj2={a:'新值a',c:'忽略c'}
newObj={}
用于(obj1中的常量键){
if(Object.hasOwnProperty.call(obj1,键)){
常数值=obj1[键];
newObj[key]=值;
if(Object.hasOwnProperty.call(obj2,key)){
常量值2=obj2[键];
newObj[key]=value2;
}
}
}

log(newObj)
您可以使用这种方法

obj1={a:'替换a',b:'保留b'}
obj2={a:'新值a',c:'忽略c'}
newObj={}
用于(obj1中的常量键){
if(Object.hasOwnProperty.call(obj1,键)){
常数值=obj1[键];
newObj[key]=值;
if(Object.hasOwnProperty.call(obj2,key)){
常量值2=obj2[键];
newObj[key]=value2;
}
}
}

console.log(newObj)
使用新值在对象上循环,如果密钥已经存在,则更新原始对象的值

const obj1={a:'替换a',b:'保留b'};
常量obj2={a:'新值a',c:'忽略c'};
常量合并对象=(obj1,obj2)=>{
//创建新对象以防止覆盖原始对象。
const merged=Object.assign({},obj1);
for(对象的常量键。键(obj2)){
如果(输入合并){
合并的[key]=obj2[key];
}
};
返回合并;
}
常量结果=合并对象(obj1、obj2);

控制台日志(结果)使用新值在对象上循环,如果密钥已存在,则更新原始对象的值

const obj1={a:'替换a',b:'保留b'};
常量obj2={a:'新值a',c:'忽略c'};
常量合并对象=(obj1,obj2)=>{
//创建新对象以防止覆盖原始对象。
const merged=Object.assign({},obj1);
for(对象的常量键。键(obj2)){
如果(输入合并){
合并的[key]=obj2[key];
}
};
返回合并;
}
常量结果=合并对象(obj1、obj2);

控制台日志(结果)您可以迭代
obj2
的键,检查该键是否存在于
obj1
中,然后使用值更新

const
obj1={a:'替换a',b:'保留b'},
obj2={a:'新值a',c:'忽略c'};
对于(obj2中的常量键)如果(obj1中的键)obj1[键]=obj2[键];

控制台日志(obj1)您可以迭代
obj2
的键,检查该键是否存在于
obj1
中,然后使用值更新

const
obj1={a:'替换a',b:'保留b'},
obj2={a:'新值a',c:'忽略c'};
对于(obj2中的常量键)如果(obj1中的键)obj1[键]=obj2[键];
控制台日志(obj1)