【问题标题】:Looping through json object that has an array with javascript循环遍历具有 javascript 数组的 json 对象
【发布时间】:2023-03-06 17:19:01
【问题描述】:

我想用 JS 输出什么

<ul>
  <li>title1
    <ul>
      <li>image1</li>
      <li>image2</li>
      <li>image3</li>
   </ul>
  </li>
  <li>title2
    <ul>
      <li>image1</li>
      <li>image2</li>
      <li>image3</li>
   </ul>
  </li>

...and so forth...

</ul>

JSON:

var data = [
    {
        title: "title1", 
        image:["image1", "image2", "image3"]
    },
    {
        title: "title2", 
        image:["image1", "image2", "image3"]
    },
    {
        title: "title3", 
        image:["image1", "image2", "image3"]
    },
    {
        title: "title4", 
        image:["image1", "image2", "image3"]
    }
];

我的 JS

for(var i=0; i < data.length; i++) {
  var item = data[i];
  var obj = {
      title:item.title,
      image:item.image
  };
  var theimages;
  var html = '';

    for(j=0; j < item.image.length; j++) {
         theimages = '<li>' + item.image[j] + '</li>'; 
    }

html += '<li>' + item.title + '<ul>';
html += theimages;
html += '</ul></li>';
} 
console.log(html);

有人可以解释我如何获得内部 for loop 的值并将其与外部 for loop 结合起来,以便最终得到我想要实现的输出。目前我最终得到了这个:

<li>title4
  <ul>
    <li>image3</li>
  </ul>
</li>

【问题讨论】:

  • 在你的for循环中,你应该像theimages += ...一样使用+=,所以它总是添加到字符串的末尾,而不是替换它。
  • 您正在覆盖 for 循环中的 images 变量。

标签: javascript arrays json for-loop


【解决方案1】:

您只需要将它附加到字符串中,而不是一次又一次地重新分配变量:

var theimages;
var html = '<ul>';
for(var i=0; i < data.length; i++) {
  var item = data[i];
  var obj = {
      title:item.title,
      image:item.image
  };


for(j=0; j < item.image.length; j++) {
         theimages += '<li>' + item.image[j] + '</li>'; 
    }

html += '<li>' + item.title + '<ul>';
html += theimages;
html += '</ul></li>';
}  
html += '</ul>';
console.log(html);

【讨论】:

  • 在 ul 之后我得到了 undefined 并且内部循环看起来是由外部 forloop 索引递增的......
    • title1
        undefined
      • image1
      • image2
    • image3
  • title2
      未定义
    • image1
    • image2
    • image3
    • image1
    • image2
    • image3
  • ....等等.... ul>
【解决方案2】:

问题是您在外部 for 循环的每次迭代中都覆盖了 html 变量。

如果你在循环之前声明这个变量,你会得到正确的结果。此外,您不想每次都覆盖 theimages 变量,而是将新部分附加到它。

var html = '';
for(var i=0; i < data.length; i++) {
  var item = data[i];
  var theimages = '';
  for(j=0; j < item.image.length; j++) {
    theimages += '<li>' + item.image[j] + '</li>'; 
  }

  html += '<li>' + item.title + '<ul>';
  html += theimages;
  html += '</ul></li>';
} 
console.log(html);

我还删除了你的 obj 变量,因为你没有使用它。

如果您构建字符串,只需使用此模式: var myString = '' 对于(项目...){ 我的字符串 += 项目 } 首先初始化字符串,然后追加。

【讨论】:

  • 太棒了......这很有效。看到我的关闭方式非常令人沮丧。非常感谢!
猜你喜欢
相关资源
最近更新 更多
热门标签