使用 for in 循环访问嵌套对象

maf*_*n95 3 javascript multidimensional-array for-in-loop

在 javascript 中,我试图从对象数组中列出的几个对象中打印值。问题与使用 for in 循环钻取对象/数组有关。更具体地说,如果可能的话,我想避免使用 for 循环(我刚刚学习了 for/in 并试图很好地理解它)

该对象如下所示:

var users = {
  'Students': [ 
    { first_name:  'Michael', last_name : 'Jordan'  },
    { first_name : 'John',    last_name : 'Rosales' },
    { first_name : 'Mark',    last_name : 'Guillen' },
    { first_name : 'KB',      last_name : 'Tonel'   }
  ],
  'Instructors': [
    { first_name : 'Michael', last_name : 'Jackson' },
    { first_name : 'Martin',  last_name : 'Puryear' }
  ]
};
Run Code Online (Sandbox Code Playgroud)

我怎么能写一个函数来返回这个对象中埋藏的所有名字?我想控制台日志:

Students
1 - MICHAEL JORDAN
2 - JOHN ROSALES
3 - MARK GUILLEN
4 - KB TONEL
Instructors
1 - MICHAEL JACKSON
2 - MARTIN PURYEAR
Run Code Online (Sandbox Code Playgroud)

我试过写几个 for/in 循环,但我一直得到意想不到的结果。预先感谢您查看此内容。

sli*_*lim 5

您可以将这样的问题分解为更小的部分。首先,我们如何获取地图的各个元素?

for (var key in users) {
   console.log(key);
}
Run Code Online (Sandbox Code Playgroud)

日志:

students
teachers
Run Code Online (Sandbox Code Playgroud)

所以现在我们可以users在该循环内一次获取一个成员:

var userArray = users[key];
Run Code Online (Sandbox Code Playgroud)

每次都提取一个数组。现在您可以循环遍历数组,通过将其添加到我们已经拥有的循环中

for(var i in userArray) {
    console.log(userArray[i]);
}
Run Code Online (Sandbox Code Playgroud)

从您的列表中打印出单个项目,例如 {first_name: 'Michael', last_name : 'Jordan'}

现在您可以以不同的方式打印它。

 var item = userArray[i];
 console.log(i + ' ' + item[first_name] + ' ' + item[last_name]);
Run Code Online (Sandbox Code Playgroud)

把所有这些部分放在一起,你就非常接近你的目标(你只需要大写——谷歌它!)

所以我们有我们需要在 Javascript 中实现的一切,这个伪代码总结了:

for each type of user in "users"
   for each user record in the list
       print the index, firstname and lastname
   end
end
Run Code Online (Sandbox Code Playgroud)

您可以通过将内部循环提取到它自己的函数中来使这个更整洁。您可以通过使用函数式编程构造(例如array.map()将一个数组转换为另一个数组)以更高级的方式完成此操作。但是上面的部分是解决问题的好“初学者方式”。