Рендеринг значений вложенных объектов массива в элемент JSX

#arrays #reactjs #object #methods #jsx

#массивы #reactjs #объект #методы #jsx

Вопрос:

У меня есть вложенный массив объектов, который выглядит примерно так:

 [
  {
    _Category: "Animals",
    _Child: {
       _Obj: [{_Title: "Monkey", _Link: "www.monkeys.com"}], [{_Title: "Monkey", _Link: "www.monkeys.com"}], etc
    }
  },
  {
    _Category: "Fruit",
    _Child: {
       _Obj: [{_Title: "Apple", _Link: "www.apples.com"}], [{_Title: "Pineapple", _Link: "www.pineapples.com"}], etc
    }
  }
]
  

Я пытаюсь добавить _Title и _Link каждой группы в элемент JSX. Я смог отобразить _Categories без проблем, но вложенные значения доставляют мне трудности.

Когда я перехожу к элементам в DevTools, я вижу, что для каждого элемента существует 11 разных групп — это то, сколько массивов объектов находится в этой конкретной категории — но _Titles и _Links пусты.

В приведенном ниже коде я сопоставил _Category данные и таким образом отобразил категории. Должен ли я сделать что-то подобное для _Child объекта — может быть, другую карту или что-то еще?


Код:

 Element = ({ cats }) => {
    return (
        <div>
            {cats
                .filter((cat) => cat._Root === "Quick Links")
                .map((cat) => (
                    
                 <>
                  <div className={"colFor-"   cat._Category}>
                    <h5>{cat._Category}</h5>

                    {cat._Child._Obj.map((item) => (
                        <>
                            <a href={item._Link}>
                                <p>{item._Title}</p>
                            </a>
                            <br />
                        </>
                    ))}
                        
                   </div>
                  </>
                ))
            }
            
        </div>
    )
  }
  

Вот что cats выглядит так:

введите описание изображения здесь


Обновление: как указал @Dominik, способ настройки моего объекта был неправильным, поэтому я изменил его.

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

1. Вы имели _Obj в виду, что внутри _Child может быть массив? Ваш JSON недействителен в том виде, в котором вы его добавили.

2. @Dominik вы правы, это должен был быть массив. Когда я перехожу к элементам в DevTools, теперь я вижу, что для каждого элемента существует 11 разных групп — это то, сколько массивов объектов находится в этой конкретной категории — но _Titles и _Links divs пусты.

Ответ №1:

Согласно вашим образцам данных, cat._Child._Obj — это массив, и каждый элемент в нем также является массивом, поэтому я думаю, что вам нужно сначала выровнять массив, а затем использовать функцию map .

 const myarr = [[{_Title: "Monkey1", _Link: "www.monkeys1.com"}], [{_Title: "Monkey2", _Link: "www.monkeys1.com"}]];
const myarrFlat = myarr.flat();
myarrFlat.map(cat => console.log(cat._Title, cat._Link));  

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

1. Привет, @Eric, я сгладил массив и немного повозился, и я смог получить данные для отображения. Я побежал flat() после _Child , а затем вернул элементы — стоит отметить, что я скорректировал способ создания моего _Child объекта и вырезал посредника. Другими словами, мне больше не нужно было делать cat._Child._Obj … и т.д. {cat._Child.flat().map((item) => { return ( <a key={item._ID} ...