首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript迭代多个嵌套集

JavaScript迭代多个嵌套集
EN

Stack Overflow用户
提问于 2016-02-10 10:23:50
回答 2查看 30关注 0票数 0

我正在构建一个PhoneGap“应用程序”(发现很难排除哪些是正常工作的),并且有一些动态的JSON结果,这些结果有几个不同的子集,为了显示易于理解的页面,我需要迭代这些子集。

数据看起来像这样(举个例子),在一些子集country2 1/ could 2中,可能存在多个、单个或无一个。

代码语言:javascript
复制
{
months: [
  {
  index: 201602,
  year: "2016",
  mon: "February",
  country1: [
  {
    index: 12345678,
    l: [
      {
      name: "Test1",
      mname: "Test 1",
      net: "February 10, 2016 11:39:00 UTC",
      }
    ]
    },
    {
    index: 23456789,
    l: [
      {
      name: "Test2",
      mname: "Test 2",
      net: "February 10, 2016 11:39:00 UTC",
      }
    ]
    }
  ],
  country2: [ ]
},
{
index: 201603,
year: "2016",
mon: "March",
country1: [
{
    index: 546547657654,
    l: [
      {
      name: "Test1",
      mname: "Test 1",
      net: "March 10, 2016 11:39:00 UTC",
      }
    ]
}
],
country2: []
},
{
index: 201604,
year: "2016",
mon: "April",
country1: [ ],
country2: [
{
    index: 78676756,
    l: [
      {
      name: "Test1",
      mname: "Test 1",
      net: "April10, 2016 11:39:00 UTC",
      }
    ]
}
]
}
]
}

我能够将它JSON.parse到变量中,当我将它输出时,我得到

代码语言:javascript
复制
 { months:
   [ { index: 201602,
       year: '2016',
       mon: 'February',
       launches: [Object],
       tbds: [Object] },
     { index: 201603,
       year: '2016',
       mon: 'March',
       launches: [],
       tbds: [Object] },
     { index: 201604,
       year: '2016',
       mon: 'April',
       launches: [],
       tbds: [Object] } ] }

然后,我使用这段代码试图获取值,但是无论我尝试了什么(点形成、索引),我都无法获得要显示的值(我设法得到了“未定义-未定义”)!

代码语言:javascript
复制
  for(var test in data.months){
    console.log(data.months[test]);
    var year = test.index[i].year;
    // var month = data.months.index.mon;
    s += "<p>" + year + "-" + month + "</p>";
  }
    $launchDiv.html(s);

有人愿意帮我解释一下怎么处理这件事吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-10 10:45:08

您可以使用Array.prototype.forEach()

发行

代码语言:javascript
复制
var year = test.index[i].year;
// var month = data.months.index.mon;

首先,测试是一个属性,而不是obj。所以应该是data.months[test]

其次,index是一个属性,而不是一个数组。所以index[i]undefinedindex[i].year也是。你应该试试data.months[test].year

逻辑

代码语言:javascript
复制
var result = "";
obj.months.forEach(function(item) {
  result += "<p>" + item.year + "-" + item.mon + "</p>";
  item.country1.forEach(function(c) {
    result += getObjectInString(c.l[0]);
  });
  item.country2.forEach(function(c) {
    result += getObjectInString(c.l[0]);
  });
});
document.getElementById("content").innerHTML = result;

function getObjectInString(obj) {
  var keys = Object.keys(obj);
  var result = "<ul>";
  keys.forEach(function(k) {
    result += "<li>" + k + " : " + obj[k] + "</li>";
  });
  result += "</ul>"
  return result;
}

代码样本

代码语言:javascript
复制
var obj = {
  months: [{
    index: 201602,
    year: "2016",
    mon: "February",
    country1: [{
      index: 12345678,
      l: [{
        name: "Test1",
        mname: "Test 1",
        net: "February 10, 2016 11:39:00 UTC",
      }]
    }, {
      index: 23456789,
      l: [{
        name: "Test2",
        mname: "Test 2",
        net: "February 10, 2016 11:39:00 UTC",
      }]
    }],
    country2: []
  }, {
    index: 201603,
    year: "2016",
    mon: "March",
    country1: [{
      index: 546547657654,
      l: [{
        name: "Test1",
        mname: "Test 1",
        net: "March 10, 2016 11:39:00 UTC",
      }]
    }],
    country2: []
  }, {
    index: 201604,
    year: "2016",
    mon: "April",
    country1: [],
    country2: [{
      index: 78676756,
      l: [{
        name: "Test1",
        mname: "Test 1",
        net: "April10, 2016 11:39:00 UTC",
      }]
    }]
  }]
}
var result = "";
obj.months.forEach(function(item) {
  result += "<p>" + item.year + "-" + item.mon + "</p>";
  item.country1.forEach(function(c) {
    result += getObjectInString(c.l[0]);
  });
  item.country2.forEach(function(c) {
    result += getObjectInString(c.l[0]);
  });
});
document.getElementById("content").innerHTML = result;

function getObjectInString(obj) {
  var keys = Object.keys(obj);
  var result = "<ul>";
  keys.forEach(function(k) {
    result += "<li>" + k + " : " + obj[k] + "</li>";
  });
  result += "</ul>"
  return result;
}
代码语言:javascript
复制
<div id="content"></div>

票数 0
EN

Stack Overflow用户

发布于 2016-02-10 10:35:21

使用基于索引的循环遍历JSON-结构:

代码语言:javascript
复制
for (var i = 0; i < data.months.length; i++) {
  var year = data.months[i].year;
  var month = data.months[i].mon;
  s+= '<p>' + year + '-' + month;
}

$launchDiv.html(s);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35312526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档