我想创建一个具有数组属性的对象,如下所示:
var arrayOfUsers = {
id: "some user id",
username : "some names",
roles : [array with roles]
}
我想通过id
访问一个元素,例如arrayOfUsers['some id']['roles'];
我是json的新手。我尝试过不同的方法,但总是遇到一堆错误。
答案 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);