У меня есть два разных объекта 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"}
какой объект структура вы хотите получить? первый или второй? или 3-й?, вы хотите добавлятьID пользователя из первый в второй?. Ваш вопрос довольно расплывчатый. Объединение может означать многое.
внутри петли Object.assign(obj1,obj2)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Объединить два объекта 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 user1314159 Не могли бы вы отметить этот ответ правильным, если ответ полезен!!
Вы уверены, что можете комбинировать объекты.
Циклы 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));Большое Вам спасибо. Я поработаю над этим сегодня вечером как с вашим решением, так и с решением Мохаммада. Я вижу, что они оба решают мою проблему
Без проблем. Дайте мне знать, если у вас есть дополнительные вопросы
Другое возможное решение этой проблемы может быть достигнуто с помощью Массив.карта() в сочетании с Объект.Назначить():
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.
Можете ли вы уточнить, каков ваш ожидаемый результат?