Добавьте значение ключа на основе свойства в массиве объекта javascript - PullRequest
0 голосов
/ 03 февраля 2020

Я хотел бы знать, как отобразить пару ключ-значение на основе свойства в javascript. Мне нужно добавить свойство title к obj1, если имя совпадает.

var obj1 = [
  {"item": 1, code: "SG", name: "Engg", status: "A"},
  {"item": 2, code: "TH", name: "Civil", status: "C"},
  {"item": 1, code: "ML", name: "IT", status: "I"}
] 

var obj2 = [
   {"name": "Engg", "title": "Service"},
   {"name": "Civil", "title": "MRT"}
 ]

Ожидаемый вывод

var newobj= [
  {"item": 1, code: "SG", name: "Engg", status: "A", title: "Service"},
  {"item": 2, code: "TH", name: "Civil", status: "C",title:"MRT"},
  {"item": 1, code: "ML", name: "IT", status: "I"}

]

Ответы [ 2 ]

4 голосов
/ 03 февраля 2020

var obj1 = [{
    "item": 1,
    code: "SG",
    name: "Engg",
    status: "A"
  },
  {
    "item": 2,
    code: "TH",
    name: "Civil",
    status: "C"
  },
  {
    "item": 1,
    code: "ML",
    name: "IT",
    status: "I"
  }
]

var obj2 = [{
    "name": "Engg",
    "title": "Service"
  },
  {
    "name": "Civil",
    "title": "MRT"
  }
]

const a = obj1.map(el => ({
  ...el,
  ...obj2.find(item => item.name === el.name)
}))

console.log(a)
0 голосов
/ 03 февраля 2020

1) Создание объекта титров из obj2
2) Использование метода reduce в obj1 и обновление заголовка из obj2.

var obj1 = [
  { item: 1, code: "SG", name: "Engg", status: "A" },
  { item: 2, code: "TH", name: "Civil", status: "C" },
  { item: 1, code: "ML", name: "IT", status: "I" }
];

var obj2 = [
  { name: "Engg", title: "Service" },
  { name: "Civil", title: "MRT" }
];

const titles = obj2.reduce((acc, { name, title }) => (acc[name] = title, acc), {});

const updated = obj1.map(item => ({
  ...item,
  title: titles[item.name] || ""
}));

console.log(updated);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...