как извлечь значения из объектов, вложенных в массив JAVASCRIPT

#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);