#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"
]