javascript - Jeg har to objekter og jeg trenger å slå dem sammen og kople sammen strenger hvis to egenskaper har samme nøkkel
Jeg har to objekter og jeg trenger å slå dem sammen og kalle sammen strenger hvis to egenskaper har samme nøkkel. Merk: Jeg bruker lodash.js
obj1 = {
name: 'john',
address: 'cairo'
}
obj2 = {
num : '1',
address: 'egypt'
}
Jeg trenger at det sammenslåtte objektet skal være som:
merged = {name:"john", num: "1", address:"cairo,Egypt"}
problemet med address-propen når jeg prøver å bruke _.defaults(obj1,obj2) eller _.merge(obj1,obj2)
adressenverdien vil være verdien av address-propen inne i obj2, så jeg trenger en måte å slå sammen de to objektene på og sammenkoble de to address-propene i hvert objekt.
Svar #1
Prøv dette:
function merge(obj1, obj2) {
let merged = {
...obj1,
...obj2
};
Object.keys(obj1).filter(k => obj2.hasOwnProperty(k)).forEach((k) => {
merged[k] = obj1[k] + "," + obj2[k]
})
return merged
}
obj1 = {
name: 'john',
address: 'cairo'
}
obj2 = {
num: '1',
address: 'egypt'
}
console.log(merge(obj1, obj2))Svar #2
Du trenger ikke engang lodash. Du kan enkelt lage din egen funksjon for det. Du kan gjøre det slik:
new Set- for å finne alle unike nøkler på tvers av begge inndataobjektenefor...of- for å iterere over unike nøkler beregnet ovenfor
function mergeObjects(obj1, obj2) {
let merged = {};
for (const property of [...new Set([...Object.keys(obj1),...Object.keys(obj2)])]) {
if(obj1[property]) merged[property] = obj1[property];
if(obj2[property]) merged[property] = merged[property] ? `${merged[property]},${obj2[property]}` : obj2[property];
}
return merged;
}
const obj1 = { name: 'john', address: 'cairo' };
const obj2 = { num : '1', address: 'egypt' };
const mergedObj = mergeObjects(obj1, obj2);
console.log(mergedObj);