Javascript |对象、数组和函数

Javascript | Objects, Arrays and functions

本文关键字:函数 数组 对象 Javascript      更新时间:2023-09-26

也许你能帮助我。我如何创建全局对象和函数,返回对象值的id?

的例子:

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

尝试:

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];
}

您不能.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.what时,what被处理得像一个字符串,所以它等于obj['what'] -但由于它是一个函数参数,您想要obj[what]

看看下面的代码。您可以简单地将其复制粘贴到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>

我建议使用好友对象,而不是通过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);