Javascript 比较两个对象以替代其中一个对象的值
我需要比较两个相同的对象(第二个对象有一个属性多于另一个) 我创建了这个代码段,它将对象的所有属性放入一个新对象中,而不嵌套它们:Javascript 比较两个对象以替代其中一个对象的值,javascript,object,compare,Javascript,Object,Compare,我需要比较两个相同的对象(第二个对象有一个属性多于另一个) 我创建了这个代码段,它将对象的所有属性放入一个新对象中,而不嵌套它们: function getAllObjectProperties(source) { var result = {}; function getProperties(object) { for (var property in object) { if (typeof object[property] === 'object') getPr
function getAllObjectProperties(source) {
var result = {};
function getProperties(object) {
for (var property in object) {
if (typeof object[property] === 'object') getProperties(object[property]);
else result[property] = object[property];
}
}
getProperties(source);
return result;
}
比较功能应如下所示:
updateObjectProperties: function(source, target) {
var temp_object = self.getAllObjectProperties(source);
for (var property in temp_object) {
if (target.hasOwnProperty(property)) {
// target_property_of_target_element = temp_object[property];
}
else {
// target_object gains new property (property nesting must be preserved)
}
}
}
我该怎么办?有可能吗?当您将一个对象的属性复制到另一个对象时,可以使用称为深度副本或浅层副本的东西。在浅复制中,目标对象将引用源对象的属性,这意味着目标对象中的更改将更改源对象中的对象 以下是浅复制的一个示例:
var source = {a: 0, b: {c: 2, d: 3}},
target = {a: 1};
function union(target, source) {
Object.keys(source).filter(function (key) {
return !target.hasOwnProperty(key);
}).forEach(function (key) {
target[key] = source[key];
});
}
union(target, source);
console.log(target);
要进行深度复制,可以使用JSON,但只有当属性可以用JSON表示时,JSON才起作用。下面是执行深度复制的联合函数
function union(target, source) {
Object.keys(source).filter(function (key) {
return !target.hasOwnProperty(key);
}).forEach(function (key) {
target[key] = JSON.parse(JSON.stringify(source[key]));
});
}
可以合并对象。如果只希望在某些条件下合并对象,则可以添加条件运算符 对此答案的研究: 代码: JS小提琴
我尝试了该功能,但在我的具体案例中出现了错误。我不太明白为什么,可惜我喜欢这种方法。我的例子中的对象是json文件。简单实用!谢谢,对我来说,这太完美了!
var mergeObj = function (obj1, obj2) {
var obj3 = {};
for (var attrname in obj1) {
obj3[attrname] = obj1[attrname];
}
for (var attrname in obj2) {
obj3[attrname] = obj2[attrname];
}
return obj3;
}