Объединить два объекта JSON javaScript

У меня есть два разных объекта JSON, один

[{"pmid":"29092960","MemberID":"33"},{"pmid":"28652336","MemberID":"33"}]

а другой нравится

{
    "meta": {
        "refs": 0, 
        "pmids": "29092960,28652336"
    }, 
    "links": {
        "self": "https://icite.od.nih.gov/api/pubs?refs=0&pmids=23456789%2C27599104"
    }, 
    "data": [
        {
            "pmid": 29092960, 
            "doi": "10.1002/cncr.27976", 
            "authors": "ABC, XYZ", 
            "journal": "Cancer", 
            "year": 2013
        }, 
        {
            "pmid": 28652336, 
            "doi": "10.1371/journal.pbio.1002541", 
            "authors": "Bbbb", 
            "journal": "PLoS Biol.", 
            "year": 2016
        }
    ]
}

Можно ли это совместить? Первый объект, который я создаю, зацикливая сетку и добавляя элементы. Второй исходит от API, который мне нужен для добавления дополнительных данных. Это не похоже на структуру любого другого примера, который я нашел. Я хотел бы связать на основе значения pmid в качестве ключа

Я хотел бы, чтобы вывод был

       {"pmid": 29092960, 
        "doi": "10.1002/cncr.27976", 
        "authors": "ABC, XYZ", 
        "journal": "Cancer", 
        "year": 2013,
         "MemberID":"33"},{
         "pmid": 29092960, 
        "doi": "10.1002/cncr.27976", 
        "authors": "ABC, XYZ", 
        "journal": "Cancer", 
        "year": 2013,
       "MemberID": "33"}

Можете ли вы уточнить, каков ваш ожидаемый результат?

cegfault 25.02.2019 03:58

какой объект структура вы хотите получить? первый или второй? или 3-й?, вы хотите добавлятьID пользователя из первый в второй?. Ваш вопрос довольно расплывчатый. Объединение может означать многое.

gkelly 25.02.2019 04:03

внутри петли Object.assign(obj1,obj2)

Beginner 25.02.2019 04:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
105
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Объединить два объекта JSON javaScript

let arr1 =[{"pmid":"29092960","MemberID":"33"},{"pmid":"28652336","MemberID":"33"}];


let arr2 = {
    "meta": {
        "refs": 0, 
        "pmids": "29092960,28652336"
    }, 
    "links": {
        "self": "https://icite.od.nih.gov/api/pubs?refs=0&pmids=23456789%2C27599104"
    }, 
    "data": [
        {
            "pmid": 29092960, 
            "doi": "10.1002/cncr.27976", 
            "authors": "ABC, XYZ", 
            "journal": "Cancer", 
            "year": 2013
        }, 
        {
            "pmid": 28652336, 
            "doi": "10.1371/journal.pbio.1002541", 
            "authors": "Bbbb", 
            "journal": "PLoS Biol.", 
            "year": 2016
        }
    ]
};

let arr3 = [];

arr1.forEach((itm, i) => {
  arr3.push(Object.assign({}, itm, arr2.data.find(k => k.pmid==itm.pmid)));
});
console.info(arr3);

Большое Вам спасибо. Я поработаю над этим сегодня вечером с вашими решениями и решениями Спэнгла. Я вижу, что они оба решают мою проблему

user1314159 25.02.2019 04:15

@user1314159 user1314159 Не могли бы вы отметить этот ответ правильным, если ответ полезен!!

Mohammad Ali Rony 07.03.2019 08:00

Вы уверены, что можете комбинировать объекты.

Циклы for in помогут вам выполнить работу, и их удобно держать в заднем кармане при работе с объектами.

Я предоставил решение ниже.

var obj1 = [{"pmid":"29092960","MemberID":"33"},{"pmid":"28652336","MemberID":"33"}];

var obj2 = {
    "meta": {
        "refs": 0, 
        "pmids": "29092960,28652336"
    }, 
    "links": {
        "self": "https://icite.od.nih.gov/api/pubs?refs=0&pmids=23456789%2C27599104"
    }, 
    "data": [
        {
            "pmid": 29092960, 
            "doi": "10.1002/cncr.27976", 
            "authors": "ABC, XYZ", 
            "journal": "Cancer", 
            "year": 2013
        }, 
        {
            "pmid": 28652336, 
            "doi": "10.1371/journal.pbio.1002541", 
            "authors": "Bbbb", 
            "journal": "PLoS Biol.", 
            "year": 2016
        }
    ]
};


for(var char in obj1){
	for(var innerArr in obj2.data){
       // obj2 pmid is a number, so convert it to a string for the compare
		if (obj1[char].pmid === obj2.data[char].pmid.toString()){
			obj2.data[char].MemberID = obj1[char].MemberID;
		}
	}
}

console.info(JSON.stringify(obj2.data));

Большое Вам спасибо. Я поработаю над этим сегодня вечером как с вашим решением, так и с решением Мохаммада. Я вижу, что они оба решают мою проблему

user1314159 25.02.2019 04:15

Без проблем. Дайте мне знать, если у вас есть дополнительные вопросы

Spangle 25.02.2019 04:38

Другое возможное решение этой проблемы может быть достигнуто с помощью Массив.карта() в сочетании с Объект.Назначить():

let arr = [
  {"pmid":"29092960","MemberID":"33"},
  {"pmid":"28652336","MemberID":"33"}
];

let json = {
  "meta": {
    "refs": 0, 
    "pmids": "29092960,28652336"
  }, 
  "links": {
    "self": "https://icite.od.nih.gov/api/pubs?refs=0&pmids=23456789%2C27599104"
  }, 
  "data": [
    {
      "pmid": 29092960, 
      "doi": "10.1002/cncr.27976", 
      "authors": "ABC, XYZ", 
      "journal": "Cancer", 
      "year": 2013
    }, 
    {
      "pmid": 28652336, 
      "doi": "10.1371/journal.pbio.1002541", 
      "authors": "Bbbb", 
      "journal": "PLoS Biol.", 
      "year": 2016
    }
  ]
};

let res = arr.map(({pmid, MemberID}) =>
{
    return Object.assign({pmid, MemberID}, json.data.find(o => o.pmid === +pmid));
});

console.info(res);

Обратите внимание, что унарный плюс оператор используется для приведения (или приведения) pmid исходного массива к числу. Из справки можно прочитать:

Unary plus is the fastest and preferred way of converting something into a number

Однако, как и в других ответах, вы можете использовать o.pmid == pmid вместо o.pmid === +pmid.

Другие вопросы по теме