[英]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.