reduce() для возврата массива строк из нескольких объектов

#javascript #arrays #string #object #reduce

#javascript #массивы #строка #объект #уменьшить

Вопрос:

Я пытаюсь использовать .reduce() для возврата одного массива строк из нескольких объектов. Кто-нибудь может дать мне представление о том, как это сделать? Я тоже пытался использовать Object.fromEntries(), но пока без особой удачи.

Это мой код:

     let searchList = searchOptions.map((optionList) => Object.entries(optionList).map(
        ([category, categoryValue]) => {return category === 'illness' ? categoryValue.map(illnessList => illnessList.list.map(illness => illness)):
        category === 'products' ? categoryValue.map(product => product.name) : categoryValue.map(doctor => doctor.name.firstName   " "   doctor.name.lastName)
    }))

    console.log('List', searchList)

 

Ввод:
введите описание изображения здесь
Это то, что я возвращаю до сих пор.

 [
  [
    [
      [
        "Cold",
        "Fever",
        "Hair loss"
      ],
      [
        "Arthrities",
        "Anemia",
        "Sleep problems"
      ],
      [
        "Cancer",
        "Lung disease",
        "Covid"
      ]
    ],
    [
      "Aswagandha powder",
      "Vitamin C suplement"
    ],
    [
      "Aldo Ova",
      "Wendy Sanchez",
      "Alejandra Lopez"
    ]
  ]
]
 

Что мне нужно, так это вернуть массив, содержащий все строки из объектов:

 [ "Cold", "Fever", "Hair loss", "Arthrities", "Anemia", "Sleep problems", "Cancer", "Lung disease", "Covid", "Aswagandha powder", "Vitamin C supplement", "Aldo Ova", "Wendy Sanchez","Alejandra Lopez"
]
 

Спасибо!

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

1. Это помогло бы опубликовать образец ввода и ожидаемого результата.

2. Пожалуйста, показывайте данные в виде текста, а не в виде изображений текста. Вы можете использовать console.log(JSON.stringify(searchList, null, 2)) , чтобы получить красивое представление данных, подходящих для вставки.

3. @pilchard, я обновил вопрос. Надеюсь, теперь это понятнее

4. @HereticMonkey Спасибо за совет!

Ответ №1:

После долгого тестирования и поиска я понял, как применить reduce() в этом двойном вложенном массиве объектов. Вот мой окончательный код:

     let searchList = searchOptions.map(optionList => Object.entries(optionList).map(([category, categoryValue]) => {
        return (category === 'illness' ? categoryValue.map(illnessList => illnessList.list.map(listArray => listArray)) :
            category === 'products' ? [categoryValue.map(product => product.name)] :
                [categoryValue.map(doctor => `${doctor.name.firstName} ${doctor.name.lastName}`)])
            .reduce((prev, current) => [...prev, ...current], [])
    }).reduce((prev, current) => [...prev, ...current], []))

    searchList = searchList.reduce((prev, current) => [...prev, ...current], [])

    console.log('List', searchList)
 

Результат:

 [
  "Cold",
  "Fever",
  "Hair loss",
  "Arthrities",
  "Anemia",
  "Sleep problems",
  "Cancer",
  "Lung disease",
  "Covid",
  "Aswagandha powder",
  "Vitamin C suplement",
  "Aldo Ova",
  "Wendy Sanchez",
  "Alejandra Lopez"
]