[英]Return value from Object match
我不是,JS流利,所以请原谅我,如果我要求一些非常基本的东西,但我无法找到我的问题的正确答案。
我写了我的第一个Node.js(加上Extra Framework和Socket.io)应用程序,我有一些乐趣设置FB类信使的服务器端(惊喜!!!)。
所以,假设我有这个数据结构来存储在线用户(这是一个JSON数组,但我不确定它是最好的方法,或者我应该使用Javascript对象):
[
{
"site": 45,
"users": [
{
"idUser": 5,
"idSocket": "qwe87r7w8qwe",
"name": "Carlos Ray Norris"
},
{
"idUser": 6,
"idSocket": "v8d9d0fgfs7d",
"name": "John Connor"
}
]
},
{
"site": 48,
"users": [
{
"idUser": 22,
"idSocket": "qwe87r7w8qwe",
"name": "David Bowie"
},
{
"idUser": 23,
"idSocket": "v8d9d0fgfs7d",
"name": "Barack H. Obama"
}
]
}
]
我想要做的是在数组中搜索给定y的x值。 在这种情况下,检索idSocket知道ID用户所而不必通过所述数组值来运行。
所以我基本上有两个问题:第一,在线存储用户的正确方法是什么? 第二,如何找到与我已经知道的值匹配的值(找到具有给定idUser的idSocket)。
我想要一个纯粹的JS方法(或使用Node,Socket.io或Express提供的一些工具),但如果那不可能,那么我可以寻找一些JQuery。
编辑我采取了chovy的建议并修改了一点结构,现在它看起来像这样
{
45: { // site
05: { // userId
"name": "Carlos Ray Norris",
"socketID": "qwe87r7w8qwe"
},
06: {
"name": "John Connor",
"socketID": "v8d9d0fgfs7d"
}
},
48: {
22: {
"name": "David Bowie",
"socketID": "erv7e6v876vr"
},
23: {
"name": "Barack H. Obama",
"socketID": "brt877brtt87"
}
}
}
多亏了Node.js,我可以轻松访问这样的数据(我知道两者,站点和userId值) var socket = data[site]["05"].socketId
。 我猜这是由于Node.js,但我不完全确定。
构建查找表:JS对象作为键值映射,其中键是id,值是用户对象。 然后,您可以在O(n)
按ID选择/匹配用户。
var map = {};
for (var i=0; i<arr.length; i++) {
var site = arr[i].site,
users = arr[i].users;
for (var j=0; j<users.length; j++) {
users[i].site = site; // needed for finding a user's site
map[ users[i].idUser ] = users[i];
}
}
// Now,
> map[ 23 ]
{idUser:23, idSocket:"v8d9d0fgfs7d", name:"Barack H. Obama", site:48}
你可以构建你的数据,所以用户ID是关键,而不是你必须循环的数组?
var data = {
45: { user: 'Fred' },
58: { user: 'Sam' )
};
var userId = 45;
data[userId].user // => 'Fred'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.