簡體   English   中英

從Object匹配返回值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM