Доступ к свойствам объектов во вложенном массиве - Javascript - PullRequest
0 голосов
/ 01 апреля 2020

Я бы хотел получить весь текст (текст 1, текст 2 ....) из следующего массива:

[
    {
    "reviews": 
    [
      {
        "_id": "5e84239d6e24358b50f3fe4e",
        "text": "My text 1"
      },
      {
        "_id": "5e8423a46e24358b50f3fe4f",
        "text": "My text 2"
      }
    ]
  },
  {
    "reviews": 
    [
      {
        "_id": "5e84239d6e24358b50f3fe4e",
        "text": "My text 3"
      },
      {
        "_id": "5e8423a46e24358b50f3fe4f",
        "text": "My text 4"
      }
    ]
  },
  {
    "reviews": 
    [
      {
        "_id": "5e84239d6e24358b50f3fe4e",
        "text": "My text 5"
      },
      {
        "_id": "5e8423a46e24358b50f3fe4f",
        "text": "My text 6"
      }
    ]
  }
]  

Этот массив хранится в переменной с именем store.

Я пробовал следующее:

const listText = stores.map(count => count.reviews.text // [null, null, null]
const listText = stores.map((count, i) => count.reviews[i].text) // Невозможно прочитать свойство 'text' из неопределенного
const listText = stores.forEach((key, i) => key.reviews[i].text) // Не удается прочитать свойство 'text' из неопределенного

Не могли бы вы помочь мне здесь, Большое спасибо

Ответы [ 4 ]

1 голос
/ 01 апреля 2020

Карта и квартира:

const data = [ 
{ "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 1" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 2" } ] }, 
{ "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 3" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 4" } ] }, 
{ "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 5" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 6" } ] } ] 
console.log(
  data.map(items => items.reviews.map(review => review.text)).flat()
)
1 голос
/ 01 апреля 2020

Вы не можете использовать count.reviews.text, так как обзоры - это массив, поэтому вам также следует перебирать обзоры:

const data = [
{
"reviews": 
[
  {
    "_id": "5e84239d6e24358b50f3fe4e",
    "text": "My text 1"
  },
  {
    "_id": "5e8423a46e24358b50f3fe4f",
    "text": "My text 2"
  }
]
  },
  {
"reviews": 
[
  {
    "_id": "5e84239d6e24358b50f3fe4e",
    "text": "My text 3"
  },
  {
    "_id": "5e8423a46e24358b50f3fe4f",
    "text": "My text 4"
  }
]
  },
  {
"reviews": 
[
  {
    "_id": "5e84239d6e24358b50f3fe4e",
    "text": "My text 5"
  },
  {
    "_id": "5e8423a46e24358b50f3fe4f",
    "text": "My text 6"
  }
]
  }
]  

const listText = data.reduce((acc,current) => acc.concat(current.reviews.map(it => it.text)), [])

console.log(listText)
0 голосов
/ 01 апреля 2020

Попробуйте это ниже:

let output = [];
            input.map(function (item_1) {
                item_1.reviews.map(function (item_2) {
                  output.push(item_2.text);
                })
            });
0 голосов
/ 01 апреля 2020

Используя .flatMap(), вы можете перебирать каждый объект, а затем .map() массив обзоров каждого объекта в массив, содержащий свойства текста. .flatMap() позволяет объединить все результаты массива внутренней карты в один большой результирующий массив.

const stores = [ { "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 1" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 2" } ] }, { "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 3" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 4" } ] }, { "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 5" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 6" } ] } ];

const res = stores.flatMap((o) => o.reviews.map(({text}) => text));
console.log(res);

Если вы не можете поддерживать .flatMap(), вы всегда можете сопоставить массив массивов, используя .map(), а затем сгладить его после использования .concat() с синтаксисом (...):

const stores = [ { "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 1" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 2" } ] }, { "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 3" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 4" } ] }, { "reviews": [ { "_id": "5e84239d6e24358b50f3fe4e", "text": "My text 5" }, { "_id": "5e8423a46e24358b50f3fe4f", "text": "My text 6" } ] } ];

const res = [].concat(...stores.map((o) => o.reviews.map(({text}) => text)));
console.log(res);
...