开发者问题收集

在 React JS 中映射数组对象的嵌套数据

2024-03-19
135

我是新手,仍在探索在 React JS 中显示和映射数据。

我想显示嵌套的数据数组对象,但它的行为符合我的要求。 这是数据:

数据 json 有效负载

{
name: {},
tld: [],
subregion: "Western Europe",
languages: {
   fra: "French",
   gsw: "Swiss German",
   ita: "Italian",
   roh: "Romansh"
},

我想显示语言对象数据,但它总是返回错误。

这是我尝试观察数据行为的代码块:

console.log(countries)
    countries.map(country => {
        console.log('Name:', country.name.common)
        console.log('Area:', country.area),
        console.log('Language:', country.languages)
        // Object.keys(country.languages).map((language) => {
        //  console.log(language)
        // })
    });

我尝试使用 Object.keys,但它也返回错误 ShowCountry.jsx:7 Uncaught TypeError: 无法将未定义或 null 转换为对象

我也尝试使用 .map()

{countries.map(country => (
            <div>
                <p>Country: {country.name.common}</p>
                <p>Area: {country.area}</p>
                <h3>Languages</h3>
                <ul>
                {/* {country.languages.map((language) => (
                    <li>{language}</li>
                    ))ther 
                } */}
                </ul>
            </div>
          ))
          }

它返回一个错误,country.languages.map 不是函数,我怀疑它可能是 null 或空的。这种方法是我在 Stackoverflow 问题中经常看到的,它应该可以工作,但我注意到语言是一种对象语言:{...},而其他问题是数组对象,例如数组:[{...}, {...}]。

我认为这个问题很简单,但我搞不清楚问题所在。你能帮我一下吗,并给出一些解释或相关链接。

3个回答

根据您提供的图像和您的问题,就我而言,您似乎正在尝试将对象表示为数组。 您可以使用 Object.keys()

为了解决错误 ShowCountry.jsx:7 Uncaught TypeError: Cannot convert undefined or null to object ,您将添加检查 country.languages && 以构建如下代码。

{countries.map((country) => (
  <div key={country.name.common}>
    <p>Country: {country.name.common}</p>
    <p>Area: {country.area}</p>
    {country.languages && (
      <div>
        <h3>Languages</h3>
        <ul>
          {Object.keys(country.languages).map((key) => (
            <li key={key}>{country.languages[key]}</li>
          ))}
        </ul>
      </div>
    )}
  </div>
))}
Calix
2024-03-19

要显示语言,您需要迭代语言对象的键和值。操作方法如下:

const country = {
    name: {},
    tld: [],
    subregion: "Western Europe",
    languages: {
       fra: "French",
       gsw: "Swiss German",
       ita: "Italian",
       roh: "Romansh"
    }
  }

  {Object.entries(country.languages).map(([code, language]) => (
      console.log(language)
  ))}
MD Hasan Patwary
2024-03-19

您可以使用嵌套的 map() 函数或通过将 map() 与其他数组方法(如 flatMap() )相结合来映射对象数组中的嵌套数据。

const data = [
  {
    id: 1,
    name: 'John',
    hobbies: ['Reading', 'Gardening']
  },
  {
    id: 2,
    name: 'Alice',
    hobbies: ['Painting', 'Cook`enter code here\'s']
  }
];
Ashwini Talware
2024-03-19