【问题标题】:how to loop trough arrays in json data using only javscript如何仅使用javascript循环遍历json数据中的数组
【发布时间】:2022-01-14 23:03:00
【问题描述】:

数据源(JSON):

{
  "photographers": [{
      "name": "Mimi Keel",
      "id": 243,
      "city": "London",
      "country": "UK",
      "tags": ["portrait", "events", "travel", "animals"],
      "tagline": "Voir le beau dans le quotidien",
      "price": 400,
      "portrait": "MimiKeel.jpg"
    },
    {
      "name": "Ellie-Rose Wilkens",
      "id": 930,
      "city": "Paris",
      "country": "France",
      "tags": ["sports", "architecture"],
      "tagline": "Capturer des compositions complexes",
      "price": 250,
      "portrait": "EllieRoseWilkens.jpg"
    }
  ],

我正在尝试循环遍历第一个 photographers 条目中键 tags 中包含的数组,并在列表项中显示所有标签。

这是我目前得到的:

function fetchData() {
  fetch("sample json file.json")
    .then(response => response.json())
    .then(data => {
      console.log(data.photographers[0].tags[1])

      // looping throw tags of a photographer
      var output = "";

      for (var i = 0; i <= data.photographers[0].tags.length; i++) {
        for (keys in data.photographers[0].tags[i]) {
          console.log(data.photographers[0].tags[i])
          if (data.photographers[0].tags[i].hasOwnProperty(keys)) {
            output += '<li>' +
              '<a href="' + data.photographers[0].tags[i] +
              '">' + data.photographers[0].tags[i] + '</a>' +
              '</li>';
          }
        }
      }
      var update = document.getElementById('tags');

      update.innerHTML = output;
    })
}

fetchData();

我愿意接受任何建议或更正我的代码

【问题讨论】:

  • 到底是什么问题?
  • 你要求重构吗?因为这是错误的堆栈:在旁注中,您可以在第二个循环中将 `data.photographers[0].tags[i]` 替换为 key。
  • 不要使用for .. in 迭代数组,而是使用正确的数组方法或for .. of。
  • 当我尝试循环遍历标签并多次显示它们时

标签: javascript json frontend


【解决方案1】:

您的循环可以变得非常简单。它有几个问题,例如您提到的一个,另一个是与多个摄影师打交道,而不仅仅是第一个(不确定这是否是您的实际用例):

您的代码更改:删除您的内部 for 循环,因为这会重复所有内容:

for (var i = 0; i < data.photographers[0].tags.length; i++) {
  console.log(data.photographers[0].tags[i])
}

建议:

// same data given in the question
let data = { "photographers": [{ "name": "Mimi Keel","id": 243,"city": "London","country": "UK","tags": ["portrait", "events", "travel", "animals"],"tagline": "Voir le beau dans le quotidien","price": 400,"portrait": "MimiKeel.jpg" }, {"name": "Ellie-Rose Wilkens","id": 930,"city": "Paris","country": "France","tags": ["sports", "architecture"],"tagline": "Capturer des compositions complexes","price": 250,"portrait": "EllieRoseWilkens.jpg"  }]};

// All photographers
for (let photographer of data.photographers) {
  for (let tag of photographer.tags) {
    console.log(tag);
    // Here you get individual tag. Use it in your code like generating output.
  }
}

// Just the first photographer
for (let tag of data.photographers[0].tags) {
  console.log(tag);
  // Here you get individual tag. Use it in your code like generating output.
}

【讨论】:

  • 很好,请问现在我该如何在 DOM 中显示
  • 中的所有标签?
  • 保留像
    这样的部分。在javascript中,您可以在循环之前有一个变量,例如 var list = "";在循环内部,您可以创建列表元素,例如: list += &lt;li&gt;&lt;a href="http://www.google.com/${tag}"&gt;${tag}&lt;/a&gt;&lt;/li&gt;;最后在循环之外: document.getElementById("output").innerHTML = list;
  • 在循环中,记得使用反引号而不是双/单引号。这是一个例子 - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签