0

私は決して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 値を配列で検索することです。この場合、配列値を実行することなく、idUser を認識して idSocket を取得します。

基本的に 2 つの質問があります。まず、ユーザーをオンラインに保存する適切な方法は何ですか? 次に、既に知っている値と一致する値を見つける方法 (特定の idUser を持つ idSocket を見つける)。

純粋な JS アプローチ (または、Node、Socket.io、または Express によって提供されるツールの一部を使用) が必要ですが、それが不可能な場合は、JQuery を探すことができます。

EDIT 私は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 のおかげで、このようなデータに簡単にアクセスできます (site と userId の値の両方を知っています) var socket = data[site]["05"].socketId。これは Node.js のおかげで行われていると思いますが、完全にはわかりません。

4

2 に答える 2

1

ルックアップ テーブルの作成: キーが ID で値がユーザー オブジェクトであるキーと値のマップとしての JS オブジェクト。次に、 のIDでユーザーを選択/一致させることができますO(n)

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}
于 2012-11-05T22:57:59.990 に答える
1

ループオーバーしなければならない配列の代わりに、ユーザー ID がキーになるようにデータを構造化できますか?

var data = {
 45: { user: 'Fred' },
 58: { user: 'Sam' )
};


var userId = 45;
data[userId].user // => 'Fred'
于 2012-11-05T23:04:42.720 に答える