Как объединить элементы массива javascript без forloop

#javascript #arrays #mongoose

#язык JavaScript #массивы #мангуст

Вопрос:

У меня есть результат запроса мангуста:

 {  "store": [  {  "items": [  "A1",  "A2"  ]  },  {  "items": [  "A3",  "A4"  ]  },  {  "items": [  "B1",  "B2"  ]  },  {  "items": [  "B3",  "B4"  ]  },  {  "items": [  "C8",  "C9",  "C10"  ]  }  ] }  

Мне нужно это: [«A1″,»A2″,»A3″,»A4″,»B1″,»B2″,»B3″,»B4″,»C8″,»C9»,C10] Есть ли какой-нибудь способ сделать это без использования цикла foreach, так как мой массив будет таким длинным и отнимет много времени.

Комментарии:

1. Попробуйте: пусть результат = данные[‘store’].Плоская карта(значение =gt; значение. предметы)

2. если вы хотите добиться еще более высокой производительности, ознакомьтесь с моей опцией агрегирования для вашего запроса, чтобы вам вообще не приходилось использовать код JavaScript!

Ответ №1:

 let data = {  'store': [  {  'items': [  'A1',  'A2'  ]  },  {  'items': [  'A3',  'A4'  ]  },  {  'items': [  'B1',  'B2'  ]  },  {  'items': [  'B3',  'B4'  ]  },  {  'items': [  'C8',  'C9',  'C10'  ]  }  ] }  let result = data['store'].flatMap(value =gt; value.items)  console.log(result) 

Ответ №2:

Чтобы еще больше повысить производительность, вы можете напрямую использовать агрегацию, чтобы использовать более быструю производительность C в базе данных:

Я предполагаю, что ваш документ базы данных выглядит примерно так: введите описание изображения здесь

Если вы используете агрегацию, подобную этой:

 let result = Model.aggregate([  {'$match':{'_id': "YourDesiredId"}}, // Add this line in case you want to match a specific document  {  '$unwind': {  'path': '$store'  }  }, {  '$unwind': {  'path': '$store.items'  }  }, {  '$group': {  '_id': '$_id',   'items': {  '$push': '$store.items'  }  }  }, {  '$project': {  '_id': 0  }  } ])  

Ваш результат будет:

 items:["A1","A2","A3","A4","B1","B2","B3","B4","C8","C9","C10"]