Я использую array.map для прокрутки вложенного массива. indicatorCategories - это мой первый массив, который содержит имя и идентификатор, а также вложенный массив с индикаторами.
Я сопоставляю эти индикаторы с выпадающим списком в реакционной бутстрапе, но мне также нужно сопоставить имя категории.
В настоящее время это код, который у меня есть.
{indicatorCategories.map(indicatorCategory => {
return (
(
<option
disabled
key={indicatorCategory.id}
value={indicatorCategory.id}
>
{"---" + indicatorCategory.name + "---"}
</option>
),
indicatorCategory.indicators.map(indicator => {
return (
<option key={indicator.id} value={indicator.id}>
{indicator.name}
</option>
);
})
);
})}
В результате я показываю только индикаторы, индикаторные категории не отображаются. Я думаю, array.map не хочет возвращать элемент и отображать его по вложенному массиву? Или я просто делаю глупую синтаксическую ошибку? Борьба с ним на некоторое время, но без сигары.
Если это невозможно, какие здесь альтернативы? Я предпочитаю не использовать некоторые зависания над категориями, чтобы показывать индикаторы из этой категории, так как это не очень удобно для мобильных устройств.
Благодарю.
Вы можете делать то, что вам нужно, с комбинацией reduce
и map
. Вот пример с фиктивными данными, вы передаете его, чтобы реагировать.
let data = [
{
id: 1,
value: 'a',
data: [
{id: 11, value: 'b'}
]
},
{
id: 2,
value: 'aa',
data: [
{id: 12, value: 'bb'},
{id: 12, value: 'bb'},
]
}
]
let results = data.reduce((acc, cur) => {
acc = acc.concat(cur.value);
return acc.concat(
cur.data.map((nested) => {
return nested.value;
})
)
}, []);
console.log(results)
https://jsfiddle.net/avLvxsb6/
Как вы можете видеть в результатах, у вас есть все значения из массива и вложенных массивов. Другая альтернатива - сопоставить данные, а затем сгладить результаты, чтобы у вас не было вложенных массивов. Затем вы проходите через это и визуализируете
(a, [b, c, d])
, которое оценивается как[b, c, d]
. Попробуйте вместо этого[a, [b, c, d]]
. Другими словами, заменитьreturn (...)
наreturn [...]
;