我想要合并两个JSON对象,以便只更新已存在的第一个对象中的属性值。
我想用第二个
扩展第一个对象var obj1 = {a:'apple', b:'banana', c:'cucumber'};
var obj2 = {a:'aarbei', b:'beet', d:'durian'};
并获得此结果
{a:'aarbei', b:'beet', c:'cucumber'};
而不是(我使用$.extend
)
{a:'aarbei', b:'beet', c:'cucumber', d:'durian'};
实际上,我的JSON对象可以更大,并且包含未知复杂性的嵌套对象/数组
答案 0 :(得分:4)
简单的for
循环怎么样:
for (var key in obj2) {
if (key in obj1) {
obj1[key] = obj2[key];
}
}
对于嵌套对象,您可以将此代码包装为递归函数:
function mergeObj(a, b) {
for (var key in b) {
if (key in a) {
a[key] = typeof a[key] === 'object' && typeof b[key] === 'object' ? mergeObj(a[key], b[key]) : b[key];
}
}
return a;
}
答案 1 :(得分:1)
这应该有用......
function mergeObjs () {
for (var key in obj2) {
if (obj1.hasOwnProperty(key)) {
obj1[key] = obj2[key]
}
}
return obj1;
}
var mergedObjs = mergeObjs();
答案 2 :(得分:1)
我采用了不同的方法,从每个对象的副本中修剪不需要的属性,然后使用这些对象扩展新对象。
var obj1 = {a:'apple', b:'banana', c:'cucumber'};
var obj2 = {a:'aarbei', b:'beet', d:'durian'};
var keepProps = ["a", "b", "c"];
var trimmedObj1 = trim(obj1, keepProps);
var trimmedObj2 = trim(obj2, keepProps);
var obj3 = $.extend({}, trimmedObj1, trimmedObj2);
console.log(obj3);
function trim(obj, properties){
var copy = $.extend({}, obj);
for(x in obj){
if(obj.hasOwnProperty(x) && properties.indexOf(x) == -1){
delete copy[x];
}
}
return copy;
}
JS小提琴: http://jsfiddle.net/m8NCc/
答案 3 :(得分:0)
Javascript继承并不复杂。
如果您有对象,请说ObjectA
喜欢
function ObjectA () {
this.a = "Hello";
this.a = "World";
this.c = 30;
}
然后你想继承这个对象:
function ObjectB () {
ObjectA.call(this);// Call the super constructor
}
ObjectB.prototype = Object.create(ObjectA.prototype); // Inheritance
ObjectB.prototype.constructor = ObjectB;
最后,您可以访问和/或修改ObjectA中的任何属性,如:
var o = new ObjectB();
o.a = "Hi";
如果您需要解析JSON对象,请参阅this(引用自己:/)。