#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
[{
"_id": "5fd6288a155cda5a10d067fa",
"contacts": [
{
"_id": "5fd6288a155cda5a10d067fb",
"id": "5fd35931ec23f76d387d8464",
"name": "dean"
},
{
"_id": "5fd6288a155cda5a10d067fc",
"id": "12",
"name": "john"
},
{
"_id": "5fd6288a155cda5a10d067fd",
"id": "1",
"name": "brad"
}
],
"messages": [],
"__v": 0
},
{
"_id": "5fd63ab97aac3826f8e64558",
"contacts": [
{
"_id": "5fd63ab97aac3826f8e64559",
"id": "5fd35931ec23f76d387d8464",
"name": "dean"
},
{
"_id": "5fd63ab97aac3826f8e6455a",
"id": "12",
"name": "brad"
}
],
"messages": [],
"__v": 0
}]
Краткий обзор: каждый объект содержит разные данные диалога. Я хочу извлечь имена, идентификаторы, сообщения из каждого разговора и сохранить их в отдельном объекте. например:
[{
"id": "5fd6288a155cda5a10d067fa"
"contacts": [dean, john, brad],
"messages": []
},
{
"id": "5fd63ab97aac3826f8e64558"
"contacts": [dean, brad],
"messages": []
}]
заранее спасибо!!
Ответ №1:
Вы можете использовать map
. Давайте назовем ваш массив как array
let newArray = array.map(a => {
return {
id: a._id,
contacts: a.contacts.map(contact => contact.name)
messages: messages
}
})
Ответ №2:
Вы можете сделать следующее, используя reduce,
const arr = [{
"_id": "5fd6288a155cda5a10d067fa",
"contacts": [
{
"_id": "5fd6288a155cda5a10d067fb",
"id": "5fd35931ec23f76d387d8464",
"name": "dean"
},
{
"_id": "5fd6288a155cda5a10d067fc",
"id": "12",
"name": "john"
},
{
"_id": "5fd6288a155cda5a10d067fd",
"id": "1",
"name": "brad"
}
],
"messages": [],
"__v": 0
},
{
"_id": "5fd63ab97aac3826f8e64558",
"contacts": [
{
"_id": "5fd63ab97aac3826f8e64559",
"id": "5fd35931ec23f76d387d8464",
"name": "dean"
},
{
"_id": "5fd63ab97aac3826f8e6455a",
"id": "12",
"name": "brad"
}
],
"messages": [],
"__v": 0
}]
let res = arr.reduce((acc, curr) => {
curr.contacts = curr.contacts.map(item => item.name);
const { _id, contacts, messages } = curr;
acc.push({
_id,
contacts,
messages,
});
return acc;
}, []);
console.log(res);