2017-01-06 4 views
-1

socket.ioを使用しているnode.jsサーバーに接続するアンドロイドアプリケーションを作成しています。オブジェクト/オブジェクトにユーザーを追加するより良い方法はありますか

今は問題はありませんが、これを行うには良い方法があるように感じます。以下のコードは、ユーザーの国/州/都道府県に基づいて、ユーザーをuserPool変数に追加します。

var userPool = {}; 

// Adds the user to the pool object 
socket.on('add or update user to pool', function(data) { 
    if (userPool.hasOwnProperty(data['country'])) { 
    if (userPool[data['country']].hasOwnProperty(data['state'])) { 
     if (userPool[data['country']][data['state']].hasOwnProperty(data['city'])) { 
     if (userPool[data['country']][data['state']][data['city']].hasOwnProperty(data['user_type'])) { 
      userPool[data['country']][data['state']][data['city']][data['user_type']][socket.id] = data; 
     } 
     else { 
      userPool[data['country']][data['state']][data['city']][data['user_type']] = {}; 
      userPool[data['country']][data['state']][data['city']][data['user_type']][socket.id] = data; 
     } 
     } 
     else { 
     userPool[data['country']][data['state']][data['city']] = {}; 
     userPool[data['country']][data['state']][data['city']][data['user_type']] = {}; 
     userPool[data['country']][data['state']][data['city']][data['user_type']][socket.id] = data; 
     } 
    } 
    else { 
     userPool[data['country']][data['state']] = {}; 
     userPool[data['country']][data['state']][data['city']] = {}; 
     userPool[data['country']][data['state']][data['city']][data['user_type']] = {}; 
     userPool[data['country']][data['state']][data['city']][data['user_type']][socket.id] = data; 
    } 
    } 
    else { 
    userPool[data['country']] = {}; 
    userPool[data['country']][data['state']] = {}; 
    userPool[data['country']][data['state']][data['city']] = {}; 
    userPool[data['country']][data['state']][data['city']][data['user_type']] = {}; 
    userPool[data['country']][data['state']][data['city']][data['user_type']][socket.id] = data; 
    } 

    if (!socket.hasOwnProperty('userInfo')) 
    socket['userInfo'] = { 'country': data['country'], 'state': data['state'], 'city': data['city'], 'user_type': data['user_type'] }; 

}); 
+0

従うことが少し難しいが、私は、コードの繰り返しの多くを気づいています。あなたができる限り、あなた自身を繰り返さないようにしてください。 – deweyredman

+1

[CodeReview](http://codereview.stackexchange.com/)でこれを尋ねるべきではありませんか? – Xufox

答えて

2

何、このようなものについて:

let userPool = {}; 

socket.on('add or update user to pool', addUserToPool); 

function addUserToPool (data) { 
    let country  = data['country'] 
     , state  = data['state'] 
     , city  = data['city'] 
     , user_type = data['user_type']; 

    userPool[country] = userPool[country] || {}; 
    userPool[country][city] = userPool[country][city] || {}; 
    userPool[country][city][user_type] = userPool[country][city][user_type] || {}; 

    let userTypes = userPool[country][city][user_type]; 

    userTypes[socket.id] = data; 
} 
1

幸運にも、あなたにはこの作品を世話するライブラリがあります。私が正しくあなたのロジックを以下のよ場合:

import extend from 'deep-extend'; 

socket.on('add or update user to pool', (data) => { 
    userPool = extend(userPool, { 
    [data.country]: { 
     [data.state]: { 
     [data.city]: { 
      [data.user_type]: { 
      [socket.id]: data 
      } 
     } 
     } 
    } 
    }); 
}); 
関連する問題