如何在javascript中使用内部数组创建json数组并访问它

时间:2015-08-10 00:59:04

标签: javascript arrays json

我想创建一个具有数组属性的对象,如下所示:

var arrayOfUsers = {
  id: "some user id",
  username : "some names",
  roles : [array with roles]
}

我想通过id访问一个元素,例如arrayOfUsers['some id']['roles']; 我是json的新手。我尝试过不同的方法,但总是遇到一堆错误。

3 个答案:

答案 0 :(得分:1)

首先,这是一个JavaScript对象。 JSON是JavaScript对象的字符串表示形式。

其次,了解对象和数组之间的区别非常重要。通常,考虑使用大括号{ }定义的对象和大括号[ ]的数组

数组中的值由其索引使用arr[index]语法访问,而对象使用obj[key]语法访问分配给对象上某个键的值。

对于您的场景,我避免使用数组,因为您希望能够按键访问对象,而不是索引。

var users = {
    "some user id": {
        username : "some names",
        roles : {
            "some role id": {
                name: "role name"
            }
        }
    }
};

实际上,这不是非常有效的数据结构,因为您可能想要处理数组以进行循环,渲染等,但要回答关于能够通过Id的索引进行索引的问题。用户和角色,这就是您的数据必须如何构建。

答案 1 :(得分:0)

以下是您的声明:

horizontal center in container

这是您访问它的方式:

 var currentUser,
     currentRole,
     arrayOfUsers = {
         id: 1,
         username: "Sample Value",
         roles: [{
             roleId: 1,
             name: "Admin"
         },
         {
             roleId: 2,
             name: "Cashier"
         }]
     };

答案 2 :(得分:0)

首先,您必须区分由[]定义的数组和基于{}的对象。

如果要创建JSON数组,可以执行以下操作:

var arrayRoles = [{
  idRole: 1,
  type: 'admin'
}, {
  idRole: 2,
  type: 'user'
}];

var userArray = [{
  id: 1,
  username: 'toto',
  roles: arrayRoles
}, {
  id: 2,
  username: 'titi',
  roles: arrayRoles
}, {
  id: 3,
  username: 'toto',
  roles: arrayRoles
}];

然后,如果您想迭代所有数据,可以使用 forEach 循环来实现,这往往更优雅:

userArray.forEach(function(elm){
  //Our roles array
  var roles = elm.roles;
  //For all item in roles array
  roles.forEach(function(value){
    //display type of role, for example.
    console.log(value.type);
  });
});

但是,如果您想搜索 JSON数组中的特定项目,可以使用过滤器方法,使用高阶函数。

function filterBy(key, filter){
  return function(elm){
    return elm[key] === filter;
  }
}

然后,您可以通过传递特定字段和值将此功能应用于过滤器,并返回结果数组:

var filtered = userArray.filter(filterBy('username', 'toto'));

//Display '1'
console.log(filtered[0].id);

//Display '3'
console.log(filtered[1].id);