2011-12-27 16 views
0

私を助けることができるかもしれません。 IDでオブジェクト値を返すグローバルオブジェクトと関数を作成するにはどうすればよいですか?Javascript |オブジェクト、配列と関数

例:

var chat = { 
    data : { 
     friends: {} 
    } 
} 

.... 
/* 
JSON DATA RETURNED: 
{"users": [{"friend_id":"62","name":"name","username":"admin","thumb":"images/avatar/thumb_7d41870512afee28d91.jpg","status":"HI4","isonline":""},{"friend_id":"66","name":"Another name","username":"regi","thumb":"images/avatar/thumb_d3fcc14e41c3a77aa712ae54.jpg","status":"Всем привет!","isonline":"avtbsl0a6dcelkq2bd578u1qt6"},{"friend_id":"2679","name":"My name","username":"Another","thumb":"images/avatar/thumb_41effb41eb1f969230.jpg","status":"","isonline":""}]} 
*/ 

onSuccess: function(f){ 
    chat.data.friends = {}; 
    for(var i=0; i< f.users.length;i++){ 
     chat.data.friends.push(f.users[i]) 
    } 
} 

どのように私は(それはfriend_idて値を返します)新しい関数を作成することができますか?

get_data_by_id: function (what, friend_id) { 

/*obj.what = getfrom_globalobject(chat.data.friends???)*/ 
} 

使用例:オブジェクトへ

var friend_name  = get_data_by_id(name, 62); 
var friend_username = get_data_by_id(username, 62); 
var friend_avatar = get_data_by_id(thumb, 62); 
+1

私はあなたがコードのビットをcopypastingのではなく、プログラムする方法を学ぶお勧めし...でも、最初のスニペットは、単に「理解することなく、どこからかcopypasted」の叫び声。 – Esailija

答えて

1

試してみてください。

get_data_by_id: function (what, friend_id) { 
    return chat.data.friends[friend_id][what]; 
} 

...しかし、それを使用するが好き:

var friend_name  = get_data_by_id('name', 62); 

...としてマッピングを設定:

for(var i=0; i< f.users.length;i++){ 
    chat.data.friends[f.users[i].friend_id] = f.users[i]; 
} 
+0

ありがとう!できます。 – user889349

+0

@ user889349あなたは大歓迎です:) – sje397

1

あなたがすることができません.push()。オブジェクトは、あなたが本当にただの数字キーを使用して、リストをしたい場合は、char.data.friends[somekey] = f.users[i];

を使用x5fastchat.data.friends配列を作る必要があるので、key => valueマッピングです:x5fastchat.data.friends = [];

しかし、あなたがアクセスできるようにするため、 friend_idによって要素には、次の手順を実行します。

onSuccess: function(f){ 
    x5fastchat.data.friends = {}; 
    for(var i=0; i< f.users.length;i++){ 
     chat.data.friends[f.users[i].friend_id] = f.users[i] 
    } 
} 

get_data_by_id: function (what, friend_id) { 
    obj[what] = chat.data.friends[friend_id][what]; 
} 

ノートの代わりに、obj[what]obj.whatobj.whatを書くとき、whatは、文字列のように扱われているので、それは同じですobj['what']になりますが、これは関数の引数であるため、obj[what]が必要です。

+0

素敵...何について:getfrom_globalobject?これは機能ですか? – user889349

+1

それは次のようになります:obj [what] = chat.data.friends [friend_id] [what]? – user889349

0

は見てみましょう次のコード。 HTMLファイルにコピーして開くだけで簡単に開くことができます。 「go」をクリックすると結果が表示されます。私があなたを正しく理解していないかどうか私に知らせてください。 :

<script> 

myObj = { "field1" : { "key1a" : "value1a" }, "field2" : "value2" } 


function go() 
{ 

    findField(myObj, ["field2"]) 
    findField(myObj, ["field1","key1a"]) 
} 


function findField(obj, fields) 
{ 

    var myVal = obj; 
    for (var i in fields) 
    { 
     myVal = myVal[fields[i]] 
    } 

    alert("your value is [" + myVal + "]"); 

} 
</script> 


<button onclick="go()">Go</button> 
0

idと名前で取得するのではなく、friendオブジェクトを使用することをお勧めします。

DATA = {"users": [{"friend_id":"62","name":"name","username":"admin","thumb":"images/avatar/thumb_7d41870512afee28d91.jpg","status":"HI4","isonline":""},{"friend_id":"66","name":"Another name","username":"regi","thumb":"images/avatar/thumb_d3fcc14e41c3a77aa712ae54.jpg","status":"Всем привет!","isonline":"avtbsl0a6dcelkq2bd578u1qt6"},{"friend_id":"2679","name":"My name","username":"Another","thumb":"images/avatar/thumb_41effb41eb1f969230.jpg","status":"","isonline":""}]} 

// simple data store definition 
Store = {items:{}}; 
NewStore = function(items){ 
    var store = Object.create(Store); 
    store.items = items || {}; 
    return store 
}; 
Store.put = function(id, item){this.items[id] = item;}; 
Store.get = function(id){ return this.items[id]; }; 
Store.remove = function(id){ delete this.items[id]; }; 
Store.clear = function(){ this.items = {}; }; 

// example 
var chat = { 
    data : { 
     friends : NewStore() 
    } 
} 

// after data loaded 
chat.data.friends.clear(); 
for(var i = 0; i < DATA.users.length; i += 1){ 
    var user = DATA.users[i]; 
    chat.data.friends.put(user.friend_id, user); 
} 

getFriend = function(id){ return chat.data.friends.get(id); } 

var friend = getFriend(66); 
console.log(friend.name); 
console.log(friend.username); 
console.log(friend.thumb); 
関連する問題