Javascript 是否有一个函数仅在目标上分配属性(如果属性存在)?

Javascript 是否有一个函数仅在目标上分配属性(如果属性存在)?,javascript,object,lodash,Javascript,Object,Lodash,这可能是一个白日梦,但我希望有一个JavaScript(或lodash?)函数可以做到这一点: let obj1 = { prop1: 'first thing', prop2: 'second thing' }; let obj2 = { prop2: 'overridden second thing', prop3: 'and another thing' }; let result = magicalFunction(obj1, obj2); // result is

这可能是一个白日梦,但我希望有一个JavaScript(或lodash?)函数可以做到这一点:

let obj1 = {
  prop1: 'first thing',
  prop2: 'second thing'
};
let obj2 = {
  prop2: 'overridden second thing',
  prop3: 'and another thing'
};

let result = magicalFunction(obj1, obj2);

// result is { prop1: 'first thing', prop2: 'overridden second thing' }

换句话说,我需要一个版本的,允许我指定我希望一个对象的属性是“先例”,并且应该忽略源对象上未出现在先例上的所有属性。

是的,您可以这样做-迭代源对象的
对象.键
,并检查replacer对象上是否有同名属性-如果有,则替换,如果没有,则不替换:

让obj1={
建议1:“第一件事”,
第二件事
};
设obj2={
建议2:'第二件事被推翻',
prop3:‘还有一件事’
};
让结果=magicalFunction(obj1、obj2);
函数magicalFunction(源,替换程序){
让输出={};
Object.keys(source).forEach(key=>output[key]=replacer[key]| | source[key]);
返回输出;
}
控制台日志(结果)给你:

function magicalFunction (obj1, obj2) {
    let keys1 = Object.keys(obj1);
    let keys2 = Object.keys(obj2);

    for(let i=0; i<keys2.length; i++) {
        if(keys1.indexOf(keys2[i]) > -1) {
            obj1[keys2[i]] = obj2[keys2[i]];
        }
    }
return obj1;
}
功能magicalFunction(obj1、obj2){
设keys1=对象。键(obj1);
设keys2=Object.keys(obj2);
for(设i=0;i-1){
obj1[keys2[i]]=obj2[keys2[i]];
}
}
返回obj1;
}
该函数迭代两个对象的键,如果在obj1中也找到obj2中的键,则覆盖该值


希望它是您正在寻找的。

您可以使用lodash的
.pick()
.keys()
(或
Object.keys()
)从第二个对象获取第一个对象中存在的键。可以使用“对象展开”将原始对象与拾取的关键点合并:

const magicalFunction=(a,b)=>({…a,{拾取(b,{键(a)));
常数obj1={
建议1:“第一件事”,
第二件事
};
常数obj2={
建议2:'第二件事被推翻',
prop3:‘还有一件事’
};
常量结果=magicalFunction(obj1、obj2);
控制台日志(结果)

const magicalFunction=(obj1,obj2)=>{for(const k of Object.keys(obj1)){if(k in obj2){obj1[k]=obj2[k];}}}返回obj1;}
--这实际上是三行代码尝试
让obj2={prop2:'}
谢谢你的回答,我接受杰克·巴什福德的答案,因为它比你的答案早了一点,虽然我说洛达斯没问题,但他都是本地人。不过,这是一个非常优雅的解决方案!