javascript - 如何访问嵌套数组的值?

标签 javascript

我在我想从中检索属性的对象数组中有一个数组。我已经完成了 here ,但它看起来很笨重。有没有更好的方法来遍历每个房间内的每个 StaffList 数组?

window.onload = getInitials;
var data = {
    "room" : [
        {
            "id" : 1,
            "StaffList": [
                {                  
                  "inroom": true,                  
                  "initials": "MG"
                },
                {
                  "inroom": false,
                  "initials": "CT"
                },
                {
                  "inroom": true,
                  "initials": "MS"
                }
            ]
        },
        {
            "id" : 2,
            "StaffList": [
                {                  
                  "inroom": true,                  
                  "initials": "MG"
                },
                {
                  "inroom": false,
                  "initials": "CT"
                },
                {
                  "inroom": true,
                  "initials": "MS"
                },
                {
                  "inroom": true,
                  "initials": "MA"
                }
            ]
        }   

    ]
}

function getInitials() {
    var len = data.room.length;
    for(i = 0; i < len; i++) {
        var staffArray = data.room[i].StaffList;
        var room = data.room[i].id;
        if( staffArray != null ) {
            var allStaff = staffArray.filter(function(person) {
                if ( person.initials ) {
                    var inits = person.initials;
                    setInitials(room, inits);
                }
            });
        }
    }
}

function setInitials(room, initials) {
    //get element by ID
    //var staffContainer = $('#div' + room);
    var staffContainer = document.getElementById('div' + room);
    if(staffContainer != null) {
        //create new div to append
        var newDiv = document.createElement('div');
        newDiv.innerHTML = initials; 
        //append newly created <div>
        staffContainer.append(newDiv);
    }
}

最佳答案

你可以使用一些forEach:

data.room.forEach(function(room) {
  room.StaffList.forEach(function(person) {
    setInitials(room.id, person.initials);
  });
});

在这里,我们首先遍历每个 room,然后遍历 StaffList 的每个 person。由于第二个 forEach 在第一个 inside 中,我们可以访问它的范围(通过闭包,参见 How do JavaScript closures work? )。然后我们可以为 setInitials 使用我们的新参数,roomperson

注意没有使用 var 语句。当您不需要创建状态(变量)时,请不要创建它。更少的状态通常也意味着更少的错误。但是,在您的 setInitials 函数中,使用容器状态和新的 div 是可行的方法。

PS:关于您的代码的其他一些事情让我很感兴趣。您的变量 room 不是房间对象,而是一个 id。这是误导!确保为正确的事物使用正确的名称。在这里,如果您想要一个状态来存储房间的 ID,请将其命名为 roomId


您在评论中说,如果 inroom 值为真,您还想在创建的 div 上添加一个类(顺便说一下,您应该 CamelCase它)。在这种情况下,您可以将它作为 setInitials 的第三个参数传递,然后在函数体中根据它的值添加类。

关于javascript - 如何访问嵌套数组的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29991649/

相关文章:

php - 客户端还是服务器端处理?

javascript - 禁止用户更改浏览器选项卡

javascript - 如何修复双击 jQuery 上/下滑动动画?

javascript - 为什么所有的异步函数都完成后 Promise.all 就不能工作了?

Javascript 全局作用域不工作

javascript - Webpack babel-loader 没有读取 .babelrc

javascript 数据不会显示在 php codeigniter 中

javascript - 如何让文本框中只允许数字

javascript - 当字符串包含 unicode 字符时,不能总是成功使用 String.startsWith()

javascript - 套接字多次发出事件