簡體   English   中英

Javascript對象比較和賦值

[英]Javascript objects comparison and assignment

假設我有一個對象a = = {id:1,name:'abc'}。

我還有另一個對象b作為

b = {id:2}

要么

b = {name: 'trp'}

要么

b = {}

現在,我希望能夠以這種方式比較和分配a和b(就像a = b一樣),無論b持有哪個屬性,它都會在a更新,如果它不持有任何屬性,則a保持不變。

例如

a= {id: 1, name: 'abc'}
b= {name: 'trp'}
a=b //should give output a= {id: 1, name: 'trp'}

此外,它可能是解決這個問題很簡單。 非常好。 剛發布。 無論解決方案是什么,它顯然都絆倒了我。

Arigatou gozaimasu

編輯也可能存在第三種情況

b = {id: 2, name: 'trp', title:'not required'}

在那種情況下,比較b並將a的值賦給a的語句也應給出結果{id:2,name:'trp'},即不合並

“合並”這兩個對象的最簡單方法是使用Object.assign (不用擔心,可以為Inernet Explorer進行多填充)

a = {'id': 1, 'name': 'abc'}
b = {'name': 'trp'}
a = Object.assign(a, b)

結果是

a == {'id': 1, 'name': 'trp'} 

在相同的密鑰的任何財產b將覆蓋a (因為分配,以便執行,從左向右或a然后b中的代碼示例中,任何現有的密鑰與新值覆蓋

 const a = { id: 1, name: 'abc'}; const b = {name: 'trp', title: 'edfg'}; const results = Object.keys(a).reduce((acc, key) => { acc[key] = b[key] || a[key]; return acc; }, {}) console.log(results); 

這是您可以嘗試的方法,它可能不是最佳解決方案,但對我有用:

var a= {id: 1, name: 'abc', test:'test'}
var b= {name: 'trp'}

for (var key in a) {
    if(key in b){
        a[key]=b[key];
    }
}

for (var key in b) {
    if(!key in a){
        a[key]=b[key];
    }
}

嘗試輸出:

for (var key in a) {
    if(key in b){
        alert(a[key]);
    }
}

這樣,如果a中不存在b中的鍵/值,a也會得到它

你可以把它變成一個函數:

function mergeArrays(a,b){

    for (var key in a) {
       if(key in b){
            a[key]=b[key];
       }
    }

    for (var key in b) {
        if(!key in a){
            a[key]=b[key];
        }
    }

    return a;
}

您只需在for循環中運行'b'對象,並替換具有匹配鍵名的'a'對象中的相似項即可。

$.each(b, function (key, val) {
   a[key][]=val;
});

謝謝,希望這能解決您的問題!!

暫無
暫無

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

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