2011-12-26 118 views
2

我想将这种信息始终存储在内存中。存储器中的数据存储 - Javascript

app_id admin_id url   status 
123  1   xyz.com  1 
123  2   xyz.com  0 
539  3   exmaple.com 1 
876  4   new.com  1 

我主要关心的是我希望查找变得简单快捷。就像在任何时间点查询:

  1. 获得特定admin_idurlstatus
  2. 获得特定app_id的全部admin_id

那么我该如何将这些信息存储在内存中。

回答

2

如下你可以做些什么。为每一行创建一个对象。并保留管理员id中的数组byAdminId以及针对应用程序ID的对象byAppIdadd函数在后面执行此操作。 getByAppIdgetByAdminId用于检索这些对象的函数。

var store = (function() { 
    var byAdminId = []; 
    var byAppId = {}; 

    return { 
     add: function(appId, adminId, url, status) { 
      var d = { 
       appId: appId, 
       adminId: adminId, 
       url: url, 
       status: status 
      }; 
      if (appId in byAppId) { // You could also use byAppId.hasOwnProperty(appId) here 
       byAppId[appId].push(d); 
      } else { 
       byAppId[appId] = []; 
       byAppId[appId].push(d); 
      } 
      byAdminId[adminId-1] = d; 
     }, 
     getByAppId: function(appId) { 
      if (appId in byAppId) { 
       return byAppId[appId]; 
      } 
      return null; 
     }, 
     getByAdminId: function(adminId) { 
      return byAdminId[adminId-1]; 
     } 
    }; 
})(); 

store.add(123, 1, "abc.com", 1); 
store.add(123, 9, "xyz.com", 0); 
store.add(539, 3, "exmaple.com", 1); 
store.add(876, 4, "new.com", 1); 

var objs = store.getByAppId(123); 
for (var i = 0; i < objs.length; i++) { 
    // access admin id as follows 
    // objs[i].adminId 
} 

var obj = store.getByAdminId(1); 
// access the url and status as follows 
// obj.url 
// obj.status 
+0

谢谢..我也在思考相同的线..主要关注的是锁定速度很快。 – chirag 2011-12-28 09:09:23

+0

不客气。 – 2011-12-28 14:16:31

2

如果你在叫a数组您的项目,你可以使用几个词典:

var i; 

var app_id_index = {}; 
var admin_id_index = {}; 
for (i = 0; i < a.length; i++) { 
    app_id_index[a[i].app_id] = a[i]; 
    admin_id_index[a[i].admin_id] = a[i]; 
}