我有2个javascript对象:obj_a和obj_b:
var obj_a = {'p1':{x:100, y:200, z:100}, 'p2':{x:100, y:100, z:300}};
var obj_b = {'p1':{x:100, y:200}, 'p2':{x:100, y:100}};
我试图仅将obj_b的“ x和y值”复制到obj_a(如果它们不同)。例如,
如果obj_b = {'p1':{x:200, y:200}, 'p2':{x:300, y:400}};
,
最终obj_a将为obj_a = {'p1':{x:200, y:200, z:100}, 'p2':{x:300, y:400, z:300}};
。完全忽略obj_a的属性“ z”。
因此,我写了以下内容:
function isDifferent(a, b) {
var aProps = Object.getOwnPropertyNames(a);
var bProps = Object.getOwnPropertyNames(b);
for (var i = 0; i < bProps.length; i++) {
var propName = bProps[i];
if (a[propName] != b[propName]) {
return true;
}
}
return false;
}
for (var prop in obj_b){
if(isDifferent(obj_a[prop], obj_b[prop]){
var bProps = Object.getOwnPropertyNames(obj_b[prop]);
for (var i = 0; i < bProps.length; i++){
var propName = bProps[i];
obj_a[prop].propName = obj_b[prop].propName;
}
}
}
但是使用obj_a [prop] .propName进行复制时会出现问题,因为我只有在I时才得到未定义console.log(obj_a[prop].propName);
。当我尝试时console.log(obj_a[p1].x);
,输出为旧值:“ 200”。有人可以启发我吗?
您应该使用obj_a[prop][propName]
。object[prop].propName
与的object[prop]["propName"]
含义相同,这意味着它将搜索字面名称为“ propName”的属性。
因此,obj_a[p1].x
将返回您期望的值,但obj_a[p1].propName
由于obj_a [p1]没有属性名“ propName” ,因此该值将是未定义的。
您想要的是将“ propName”视为“字符串变量”,而不是“字符串文字”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句