如何在不添加新属性的情况下从另一个JavaScript对象深度复制



这里我有一个默认对象,它具有嵌套属性,例如-

default = { 
key1: val1;
key2: {
key3: val3,
key4: val4
}
}

以及一个具有与上述相同属性的新值以及其自身的一些额外属性的新对象

newObject = {
key1: val11,
key2: {
key3: val31,
key5: val51,
}
}

现在,我需要用newObject替换所有可用的默认嵌套属性,而不向默认添加任何新属性。默认的骨架永远不应该改变。此外,这需要一个深入的副本。所以这里的结果应该是:

result = { 
key1: val11;
key2: {
key3: val31,
key4: val4,
}
}

我为您添加了代码,但如果您需要更复杂的代码,那么您可能需要使用一些js包,但我认为这应该足够了。

给你:

let objectDefault = {
key1: 'val1',
key2: {
key3: 'val3',
key4: 'val4'
}
}

let otherObject = {
key1: 'val5',
key2: {
key3: 'val6',
key4: 'val7'
},
key10: 'test'
}
let filteredValuesOfOthedObject = Object.fromEntries(Object.entries(otherObject).filter(([key]) => Object.keys(objectDefault).includes(key)));
let newObject = {...objectDefault, ...filteredValuesOfOthedObject}
console.log(newObject)

看看这个。//父对象设_default={key1:"val1",键2:{key3:"val3",key4:"val4",键6:{key7:"测试",key10:"val10"}},key11:'val231'};

// Output object
let newObj = {
key1: 'val11',
key2: {
key3: 'val31',
key5: 'val51',
key6: {
key7: 'val31',
key8: 'val43'
},
key12: 'val212'
}
};
// Utils to check if value if object
function isObject(value) {
return typeof (value) === 'object' && !(value instanceof Date) && !Array.isArray(value) && !Object.is(value, null) && !Object.is(value, undefined) && !(value instanceof Function)
}
// Recursive function to add 
function recursive(obj, ouputObj) {
Object.keys(obj).map((el, i) => {
let val = obj[el];
if (!ouputObj?.[el]) ouputObj[el] = val;
if (isObject(val)) recursive(val, ouputObj?.[el] || {});
})
return ouputObj;
}
newObj = recursive(_default, newObj);
console.log(`~~~~~~~~~~~~~~~, `, newObj);

相关内容

最新更新