2017-08-15 32 views
1

我試圖合併2組對象的&陣列像下面合併2套對象+陣列的使用JavaScript

{ 
    exclude: ['placeholder'], 
    attributes: { MYID : '' } 
    map: 'input' 
} 

{ 
exclude: ['options'], 
attributes: { class: '', id:'', name:'', }, 
map: '', 
} 

我嘗試使用jQuery的$.extend功能,它的工作,但它只合並對象。 而且也嘗試與lodash js,這也無濟於事。 我得到的輸出

{ 
    exclude: ['options'], 
    attributes: { class: '', id: '', name: '', MYID: '' }, 
    map: '', 
} 

我需要一個像

{ 
    exclude: ['options','placeholder'], 
    attributes: { class: '', id: '', name: '', MYID: '' }, 
    map: '', 
} 

代碼輸出我試着用

$.extend(true,{ 
    exclude: ['placeholder'], 
    attributes: { MYID : '' } 
    map: 'input' 
},{ 
exclude: ['options'], 
attributes: { class: '', id:'', name:'', }, 
map: '', 
}); 
+1

請加你已經嘗試過的代碼。 – Andy

+0

@做完了。請檢查。 –

+0

使用concat()連接「排除」數組,for-in循環以重映射「attributes」,並且「map」始終爲空字符串,因此請保留它。 –

回答

2

可以爲此使用for...in循環創建自定義功能和檢查每個值的類型。

var obj1 = { 
 
    exclude: ['placeholder'], 
 
    attributes: { MYID : '' }, 
 
    map: 'input' 
 
} 
 

 
var obj2 = { 
 
exclude: ['options'], 
 
attributes: { class: '', id:'', name:'', }, 
 
map: '', 
 
} 
 

 

 
function merge(o1, o2) { 
 
    for (var i in o2) { 
 
    if (o1[i]) { 
 
     if (typeof o2[i] == 'object') { 
 
     if (Array.isArray(o2[i])) o1[i].push(...o2[i]) 
 
     else o1[i] = Object.assign({}, o1[i], o2[i]) 
 
     } else { 
 
     \t o1[i] = o2[i] 
 
     } 
 
    } else { 
 
     o1[i] = o2[i] 
 
    } 
 
    } 
 
    return o1; 
 
} 
 

 

 
console.log(merge(obj1, obj2))

+0

嗨, 感謝您的回答。我可以知道爲什麼函數沒有返回任何值嗎?它改變了原來的變量嗎? –

+0

@Varun Sridharan是的,它正在修改第一個對象 –

+0

謝謝。但我需要函數來返回值。 –

1

因爲_.extend(...)覆蓋現有的區域,而不是填補它。使用_.mergeWith(,, customizer)與定製功能

嘗試,那就是負責合併需要的方式領域,如:

function customizer(initialObject, source) { 
    if (_.isArray(initialObject)) { 
     return initialObject.concat(source); 
    } else if (_.isObject(initialObject)) { 
     return _.extend(initialObject, source); 
    } else { 
     return source; 
    } 
} 

_.mergeWith({a: [1], b: {c: 4}}, {a: [2, 3], b: {d: 5}}, customizer); 

//{a: Array(3), b: {…}} 
//a 
//: 
//(3) [1, 2, 3] 
//b 
//: 
//{c: 4, d: 5} 
//__proto__ 
//: 
//Object 
+0

OP是使用jQuery,而不是lodash –

+1

他說他也使用lodash – Artem