我遇到的问题是我有这样的数组:
var users = {
'asidfjasd': {
realname: 'John'
},
'ggggggg': {
realname: 'Peter'
}
}
我想用
访问用户users[1]
获取
'ggggggg': {
realname: 'Peter'
}
有没有办法用node.js做到这一点?
修改
我找到了一种解决方法,方法是创建一个带有用户名的第二个对象,并指向users-object的id。 这可能不适用于其他应用程序,但它是为我做的。
CLOSED
答案 0 :(得分:2)
你应该仔细看看你想要使用的结构。
可以使用键访问对象。密钥是唯一的,无序。我认为你改变的例子是正确的(我添加了一个额外的属性,以便在后面的例子中使用)。
因此...
var users = {
'asidfjasd': {
realname: 'John'
},
'ggggggg': {
realname: 'Peter'
},
'aaaa': {
realname: 'Peter'
}
}
users.ggggggg // { realname: "Peter" }
users['ggggggg'] // { realname: "Peter" }
现在,可以使用Object.keys(users)
迭代:
var keys = Object.keys(users);
要将名称记录到控制台,您可以执行以下操作:
keys.forEach(function (el) {
console.log(users[el].realname);
});
要返回一个名称数组,您可以这样做:
var names = keys.map(function (el) {
return users[el].realname;
});
如何将当前数据转换为可通过数字索引访问的数组:
var arrayOfObjs = keys.map(function (el) {
return { socketname: el, realname: users[el].realname };
});
输出
[
{ "socketname": "asidfjasd", "realname": "John" },
{ "socketname": "ggggggg", "realname": "Peter" }
]
然后,您可以使用数组方法从对象中提取所需的信息。假设您想获得一个对象数组,其中真实姓名是"彼得"假设多个" Peters"在数据中:
var peters = arrayOfObjs.filter(function (el) {
return el.realname === 'Peter';
});
输出
[
{ "socketname": "ggggggg", "realname": "Peter" },
{ "socketname": "aaaa", "realname": "Peter" }
]