2011-12-26 80 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]; 
}