Объедините два Javascript объектов в один объект с одинаковыми клавишами - PullRequest
0 голосов
/ 10 марта 2020

Мне нужна помощь, чтобы объединить два объекта с одинаковыми ключами в один объект. Я получаю эти объекты из запроса API.

Мой первый объект:

var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
}

Мой второй объект:

var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}

Я хочу, чтобы он выглядел так конец:

{
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}

Я пробовал Object.assign, но у меня не получилось.

Ответы [ 4 ]

2 голосов
/ 10 марта 2020

Я сделал это:

var obj1 = 
    { RefinableString15: "Claims"
    , RefinableString16: "2123"
    , RefinableString17: "New York Cyberstate"
    , RefinableString19: "Global Property"
    , RefinableString20: ""
    , RefinableString21: ""
    , RefinableString22: ""
    , RefinableString23: ""
    , RefinableString24: ""
    , RefinableString25: ""
    } 
var obj2 = 
    { RefinableString15: ""
    , RefinableString16: ""
    , RefinableString17: ""
    , RefinableString19: ""
    , RefinableString20: "Test"
    , RefinableString21: "Red"
    , RefinableString22: "Test"
    , RefinableString23: "Red"
    , RefinableString24: "Test"
    , RefinableString25: "Green"
    } 

    
const cleanObj = o => Object.entries(o).reduce((a,[k,v])=>{if(v!='') a[k]=v;return a}, {}) 
     
var obj3 = { ...obj1, ...cleanObj(obj2)  }

console.log ( obj3 )
.as-console-wrapper { max-height: 100% !important;  top: 0; }
2 голосов
/ 10 марта 2020

var obj1 = {
  RefinableString15: "Claims",
  RefinableString16: "2123",
  RefinableString17: "New York Cyberstate",
  RefinableString19: "Global Property",
  RefinableString20: "",
  RefinableString21: "",
  RefinableString22: "",
  RefinableString23: "",
  RefinableString24: "",
  RefinableString25: ""
}

var obj2 = {
  RefinableString15: "",
  RefinableString16: "",
  RefinableString17: "",
  RefinableString19: "",
  RefinableString20: "Test",
  RefinableString21: "Red",
  RefinableString22: "Test",
  RefinableString23: "Red",
  RefinableString24: "Test",
  RefinableString25: "Green"
}

function merge(object1, object2) {
  const keys = Object.keys(object1);
  return keys.reduce((result, item) => {
    result[item] = object1[item] || object2[item];
    return result;
  }, {})
}

console.log(merge(obj1, obj2))
1 голос
/ 10 марта 2020

Используйте forEach l oop и создайте один объект, значения которого pu sh только непустые строки.

var obj1 = {
  RefinableString15: "Claims",
  RefinableString16: "2123",
  RefinableString17: "New York Cyberstate",
  RefinableString19: "Global Property",
  RefinableString20: "",
  RefinableString21: "",
  RefinableString22: "",
  RefinableString23: "",
  RefinableString24: "",
  RefinableString25: ""
};

var obj2 = {
  RefinableString15: "",
  RefinableString16: "",
  RefinableString17: "",
  RefinableString19: "",
  RefinableString20: "Test",
  RefinableString21: "Red",
  RefinableString22: "Test",
  RefinableString23: "Red",
  RefinableString24: "Test",
  RefinableString25: "Green"
};

const res = {};
Object.keys(obj1).forEach(key => (res[key] = obj1[key] || obj2[key]));

console.log(res);
1 голос
/ 10 марта 2020

Вам нужно очистить пустые свойства и объединить два объекта. Нечто подобное

  function clean(obj) {
            for (const propName in obj) {
                if (
                    obj[propName] === '' ||
                    obj[propName] === null ||
                    obj[propName] === undefined
                ) {
                    delete obj[propName];
                }
            }
            return obj;
        }
    const result = {...clean(obj1),...clean(obj2)};
...