Объединение двух объектов массива javascript, имеющих одинаковое значение свойства - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть два объекта javascript, как показано ниже.

obj1 = {
  sdfjjweifh: {
    user: "bob@bob.com",
    id: "10"
  },
  fjemsnduci: {
    user: "fred@fred.com",
    id: "20"
  },
  dhcnwodpcu: {
    user: "joe@joe.com",
    id: "30"
  }
};

obj2 = [{
  Name: "Bob",
  Id: "10"
}, {
  Name: "Fred",
  Id: "20"
}, {
  Name: "Joe",
  Id: "30"
}];

Я хочу объединить их, когда поля "id" совпадают с таким результатом:

obj1 = {
  sdfjjweifh: {
    user: "bob@bob.com",
    id: "10",
    Name: "Bob"
  },
  fjemsnduci: {
    user: "fred@fred.com",
    id: "20",
    Name: "Fred"
  },
  dhcnwodpcu: {
    user: "joe@joe.com",
    id: "30",
    Name: "Joe"
  }
};

Какой самый простой способ сделать это с чистым javascript / ES6?

Я нашел много вещей, близких к этому, но могуне совсем сложить все вместе.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Используйте for..in, чтобы зациклить объект и получить идентификатор от каждого объекта.Затем используйте массив findIndex, чтобы получить индекс объекта из массива, которому соответствует Id.Если идентификатор совпадает, то получите его имя из массива и добавьте новый ключ в объект

let obj1 = {
  sdfjjweifh: {
    user: "bob@bob.com",
    id: "10"
  },
  fjemsnduci: {
    user: "fred@fred.com",
    id: "20"
  },
  dhcnwodpcu: {
    user: "joe@joe.com",
    id: "30"
  }
};

let obj2 = [{
  Name: "Bob",
  Id: "10"
}, {
  Name: "Fred",
  Id: "20"
}, {
  Name: "Joe",
  Id: "30"
}];


for (let keys in obj1) {
  if (obj1[keys].hasOwnProperty('id')) {
    let keyIndex = obj2.findIndex(function(item) {
      return item.Id === obj1[keys].id
    });
    if (keyIndex !== -1) {
      obj1[keys].Name = obj2[keyIndex].Name
    }
  }
}
console.log(obj1)
0 голосов
/ 21 февраля 2019

Вы можете использовать цикл forEach() для ключей obj1, чтобы для каждого свойства obj1 вы могли найти соответствующий соответствующий объект в массиве obj2:

var obj1 = {
  sdfjjweifh: {
    user: "bob@bob.com",
    id: "10"
  },
  fjemsnduci: {
    user: "fred@fred.com",
    id: "20"
  },
  dhcnwodpcu: {
    user: "joe@joe.com",
    id: "30"
  }
};

var obj2 = [{
  Name: "Bob",
  Id: "10"
}, {
  Name: "Fred",
  Id: "20"
}, {
  Name: "Joe",
  Id: "30"
}];

Object.keys(obj1).forEach((key) => {
  var existObj2 = obj2.find(({Id}) => obj1[key].id === Id);
  if(existObj2){
    obj1[key].Name = existObj2.Name
  }
});
console.log(obj1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...