【问题标题】:how to map inside another map in React.js如何在 React.js 中映射到另一个地图中
【发布时间】:2019-10-13 01:25:51
【问题描述】:

使用 React.js 中的 map 函数从这个 json 中获取 Mp3 中的内容:

{
  "175": {
    "label": "Pub Radio",
    "icone": "",
    "Mp3": {
      "33278": {
        "id": 33278,
        "titre": "Ricardo Villalobos - Caminando",
        "intention1": "Doux",
        "intention2": "Doux",
        "intention3": "Doux",
        "langue": "Allemand",
        "visibilite": 1
      }
    }
  },
  "176": {
    "label": "Pub Cd/Dvd",
    "icone": "",
    "Mp3": {
      "33277": {
        "id": 33277,
        "titre": "Mano lo taugh - Primative People",
        "intention1": "Chaleureux, rassurant",
        "intention2": "Joyeux",
        "intention3": "Souriant",
        "langue": "Allemand",
        "visibilite": 1
      },
      "33279": {
        "id": 33279,
        "titre": "Foals - Late Night (Solomun Remix).mp3",
        "intention1": "Amical, complice",
        "intention2": "Amical, complice",
        "intention3": "Amical, complice",
        "langue": "Allemand",
        "visibilite": 1
      }
    }
  },
  "245": {
    "label": "Billboard",
    "icone": "",
    "Mp3": {
      "33280": {
        "id": 33280,
        "titre": "Techno",
        "intention1": "Posé, calme",
        "intention2": "Amical, complice",
        "intention3": "Souriant",
        "langue": "Americain",
        "visibilite": 1
      }
    }
  }
}

这是我的地图功能:

  {Object.keys(extraitMP3).map((label, i) => (
    <li key={i}>
        <span >key: {i} Name: {extraitMP3[label]}</span>
            {Object.keys(extraitMP3[label]).map((Mp3, i) => (
        <li key={i}>
            <span >key: {i} Name: {extraitMP3[label][Mp3]}</span>

            {Object.keys(extraitMP3[label][Mp3]).map((idSon, i) => (
        <li key={i}>
            <span >key: {i} Name: {extraitMP3[label][Mp3][idSon]}</span>
            {console.log('Titre',extraitMP3[label][Mp3][idSon].titre)}
            {console.log('Intention 1',extraitMP3[label][Mp3][idSon].intention1)}
            {console.log('Intention 2',extraitMP3[label][Mp3][idSon].intention2)}
            {console.log('Intention 3',extraitMP3[label][Mp3][idSon].intention3)}
            {console.log('Langue',extraitMP3[label][Mp3][idSon].langue)}
            {console.log('Visibilite',extraitMP3[label][Mp3][idSon].visibilite)}
        </li>
    ))}
        </li>
    ))} 
        </li>
    ))}

结果按预期显示在控制台中,但我收到许多其他未定义的结果。我认为这是使用地图循环的问题,但我不知道我的问题到底出在哪里:

这是我在控制台中找到的:

【问题讨论】:

  • 快速提示,避免在嵌套循环中使用同名变量 (i)...这可能是您的问题...
  • 我把它改成了 i, j 和 k 但什么都没发生还是一样的问题
  • &lt;span &gt;key: {i} Name: {extraitMP3[label]}&lt;/span&gt; 这会输出一个对象,这样可以吗?
  • 什么意思不清楚我删了结果没变

标签: javascript json reactjs loops object


【解决方案1】:

这可以简化为

{
   Object.keys(extraitMP3).map(ids => {
     return (
        <li key={ids}>
           <span >key: {ids} Name: {extraitMP3[ids].label}</span>
              {
                Object.keys(extraitMP3[ids].Mp3).map(idJson => {
                  return(
                    <li key={idJson}>
                      <span>key: {idJson} Name: {idJson}</span>
                      {console.log('Titre',extraitMP3[ids].Mp3[idJson].titre)}
                      {console.log('Intention1',extraitMP3[ids].Mp3[idJson].intention1)}
                      {console.log('Intention 2',extraitMP3[ids].Mp3[idJson].intention2)}
                      {console.log('Intention 3',extraitMP3[ids].Mp3[idJson].intention3)}
                      {console.log('Langue',extraitMP3[ids].Mp3[idJson].langue)}
                      {console.log('Visibilite',extraitMP3[ids].Mp3[idJson].visibilite)}
                   </li>
                  );
                 })
                }
              </li>
            );
          })
        }

并且使用索引作为键不是一个好方法

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    简答:

    extraitMP3[label][Mp3] 应该是 extraitMP3[label].Mp3(或者 extraitMP3[label]['Mp3'] 虽然大多数 linter 不推荐)

    但是有几个地方错了

    • 您有重复的键,这会破坏您的 React 性能。而不是&lt;li key={i}&gt;,而是使用唯一标识符,例如歌曲ID(用于最后一个嵌套循环)
    • 正如 HRK44 所指出的,您应该在每个循环中使用唯一的迭代器。
    • 个人喜好,以后我会使用Object.entries来避免此类问题。这样您就不会迷失在长连接的字符串中,并且更容易调试...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多