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 inndataobjektene
  • for...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);

Relaterte artikler