【问题标题】:javascript nested for loop from a string(multiple layers)javascript从字符串嵌套for循环(多层)
【发布时间】:2018-01-17 12:00:44
【问题描述】:

我有一个字符串,我正在尝试循环访问。它有嵌套数组,我想从每一层获取值。但是,从第二层开始,我似乎得到了一个 undefined。

//字符串 [{"username":"test","usersurname":"test","cellnumber":"test","displayname":"test","profilepicture":"test","projects":[{"projectname":"test","dateadded":"test","notes":"test","image":"test"},{"task":[{"taskname":"test","taskdescription":"test","taskimage":"test"}]}]}]

//我的for循环——所有变量都先声明

   for(var i = 0; i < data.length; i++){
    username = data[i].username;
    console.log(username);
    usersurname = data[i].usersurname;
    cellnumber = data[i].cellnumber;
    displayname = data[i].displayname; 
    profilepicture = data[i].profilepicture;
    for(var j = 0; j < data[i].projects.length; j++){
      dateadded = data[i].projects[j].dateadded;
      console.log(dateadded);
      notes = data[i].projects[j].notes;
      image = data[i].projects[j].image;
       for(var k = 0; k < data[i].projects[j].task.length; k++){
         taskname = data[i].projects[j].task[k].taskname;
         console.log(taskname);
         taskdescription = data[i].projects[j].task[k].taskdescription;
         taskimage = data[i].projects[j].task[k].taskimage;
       }          
    }

  }

【问题讨论】:

  • 旁注:JSON 是一种用于数据交换的文本表示法(More here.) 如果您正在处理 JavaScript 源代码,而不是处理 string,那么您就不是在处理 JSON。
  • 使用JSON.parse解析字符串,然后循环遍历
  • 您发布的示例数据在projects[i] 中没有task 属性
  • 旁注:您可以通过定义更多变量(user = data[i]; projects = user.projects; project = propects[j] 等)而不是使用 data[i].projects[j].task[k].propName 来使代码更具可读性

标签: javascript arrays string object


【解决方案1】:

请检查代码中未定义的结束错误。如果某些东西未定义,循环将中断。

for (var i = 0; i < data.length; i++) {
        username = data[i].username;
        console.log(username);
        usersurname = data[i].usersurname;
        cellnumber = data[i].cellnumber;
        displayname = data[i].displayname;
        profilepicture = data[i].profilepicture;
        if("undefined" != typeof (data[i].projects))
        {
            for (var j = 0; j < data[i].projects.length; j++) {
                dateadded = data[i].projects[j].dateadded;
                console.log(dateadded);
                notes = data[i].projects[j].notes;
                image = data[i].projects[j].image;
                if ("undefined" != typeof (data[i].projects[j].task)) {
                    for (var k = 0; k < data[i].projects[j].task.length; k++) {
                        taskname = data[i].projects[j].task[k].taskname;
                        console.log(taskname);
                        taskdescription = data[i].projects[j].task[k].taskdescription;
                        taskimage = data[i].projects[j].task[k].taskimage;
                    }
                }
            }
        }

    }

【讨论】:

  • 这修复了第 1 层和第 3 层,只是在第 2 层未定义
  • 您可以为第二层添加相同的检查。它只是一种方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 2014-01-29
  • 2012-01-23
  • 2015-10-15
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多