编辑:谢谢4个伟大的,多样化的答案-即使我意识到我需要更多的要求之后,我还是选择了对我有用的解决方案:我还需要添加新的属性,并使其与对象中的数组一起使用。
我想做的是:通过另一个对象更新一个对象。
以下是一些限制条件:
我的问题是我不知道如何轻松地对嵌套对象执行此操作,因为typeof x === "object"
例如对于Date对象也返回true。
这是到目前为止我得到的:
let originalObj = {
dateCreated: new Date(2021, 1, 10),
value: "100",
subObj: {
count: 55,
val: null
}
};
let updateObj = {
dateCreated: new Date(2021, 1, 11),
subObj: {
val: 90
}
};
let updateOrignal = (oObj, uObj) => {
for (let prop in uObj) {
if (uObj.hasOwnProperty(prop) &&
oObj.hasOwnProperty(prop)) {
oObj[prop] = uObj[prop];
}
}
};
console.log(originalObj);
updateOrignal(originalObj, updateObj)
console.log(originalObj);
目前,我的更新对象如下所示:
{
"dateCreated": "2021-02-10T23:00:00.000Z",
"value": "100",
"subObj": {
"val": 90
}
}
我的目标:
{
"dateCreated": "2021-02-10T23:00:00.000Z",
"value": "100",
"subObj": {
"count": 55,
"val": 90
}
}
这是您需要的解决方案(来自https://gist.github.com/ahtcx/0cd94e62691f539160b32ecda18af3d6),实际上您可以在Google上搜索“深度合并”或“递归合并两个javascript对象”
我添加了ES6 sintax {... obj},以确保在合并对象之前先克隆它们
let originalObj = {
dateCreated: new Date(2021, 1, 10),
value: "100",
subObj: {
count: 55,
val: null
}
};
let updateObj = {
dateCreated: new Date(2021, 1, 11),
subObj: {
val: 90
}
};
const merge = (target, source) => {
// Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties
for (const key of Object.keys(source)) {
if (source[key] instanceof Object) Object.assign(source[key], merge(target[key], source[key]))
}
// Join `target` and modified `source`
Object.assign(target || {}, source)
return target
}
console.log(merge({ ...originalObj}, {...updateObj}));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句