[英]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.