簡體   English   中英

將一個對象的選定屬性值復制到另一個對象

[英]Copying selected property values of one object to another

我有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進行復制時會出現問題,因為只有在console.log(obj_a[prop].propName);時我才得到未定義的內容console.log(obj_a[prop].propName); 當我嘗試console.log(obj_a[p1].x); ,輸出為舊值:“ 200”。 有人可以啟發我嗎?

如果要通過存儲在變量中的名稱來引用對象屬性,則需要使用方括號表示法 在您的情況下,

var propName = bProps[i];
obj_a[prop].propName = obj_b[prop].propName;

采用

var propName = bProps[i];
obj_a[prop][propName] = obj_b[prop][propName];

您應該使用obj_a[prop][propName] object[prop].propNameobject[prop]["propName"] ,這意味着它將搜索字面名稱為“ propName”的屬性。

因此, obj_a[p1].x將返回您期望的值,但是obj_a[p1].propName將是未定義的,因為obj_a [p1]沒有屬性名“ propName”。

您想要的是將“ propName”視為“字符串變量”而不是“字符串文字”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM