2011-12-27 74 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 2011-12-27 12:05:33

回答

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 2011-12-27 12:18:49

+0

@ user889349不客气:) – sje397 2011-12-27 22:45:47

1

你不能.push()的一个对象。对象是key => value映射,所以你需要使用char.data.friends[somekey] = f.users[i];

如果你真的只是想用数字键列表,请x5fastchat.data.friends数组: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.what:当写obj.whatwhat就像是一个字符串处理,所以它等于到obj['what'] - 但是因为它是你想要的功能参数obj[what]

+0

不错......那么getfrom_globalobject呢?这是一个功能吗? – user889349 2011-12-27 12:12:09

+1

或者它将会是:obj [what] = chat.data.friends [friend_id] [what]? – user889349 2011-12-27 12:13:57

0

看看的以下代码。您可以简单地将其粘贴到HTML文件中并将其打开。点击“去”,你应该看到结果。如果我没有正确理解你,请告诉我。 :

<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和名字来获取它们。

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);