2016-09-30 66 views
0

我處於需要將某些數據存儲在對象中的情況,但由於瀏覽器限制,我只能擁有一定數量的數據。由於我的應用程序還需要能夠獲取這些數據,因此我將它存儲在屬性的鍵是標識符的對象中。獲取最舊日期的屬性

的數據是這樣的:

memory = { 
    13: { 
     last_updated: 241, 
     ... 
    }, 
    26: { 
     last_updated: 363, 
     .... 
    } 
} 

last_updated將是順理成章的Date.now()字符串。該對象不能超過6個屬性。當它達到那個長度時,我需要用新數據開始替換最古老的屬性。我如何獲得對象的最古老的屬性?

+0

您是否嘗試過查看每個對象並找到具有最舊'last_updated'值的那個?僅供參考,'Date.now()'返回一個數字,而不是一個字符串。 –

回答

2

一種方法是隻由最後更新的時間戳的對象鍵進行排序,最後一個的流行,最古老的一個

var oldest = memory[Object.keys(memory).sort(function(a,b) { 
    return memory[b].last_updated - memory[a].last_updated 
}).pop()]; 
0

這將採取最新的6個項目從memory對象。

var freshMemory = Object.keys(memory) 
    .map(function (k) { return [k, data[k]] }) 
    .sort(function (a, b) { return b[1].last_updated - a[1].last_updated; }) 
    .slice(0, 6) 
    .reduce(function (o, v) { o[v[0]] = v[1]; return o; }, {}); 

簡短解釋

  1. Object.keys.map方法相結合,將對象傳送到含有兩個元組(該鍵和值)
  2. 陣列則.sort將排序的陣列按last_updated以相反順序排列
  3. 然後.slice將取前6項
  4. ,最後.reduce會將帶有二元組的數組轉換回對象。
0

你可以做這樣的事情:

var obj = {}; 
 
for(var i = 0;i < 5; i++){ 
 
    obj[i] = {date:Date.now() + i}; 
 
} 
 

 
function addNew(date){ 
 
    if(obj.length < 5){ 
 
     obj[obj.length] = {date:date}; 
 
     return; 
 
    } 
 
    var arr = []; 
 
    for(var prop in obj){ 
 
     arr.push({prop:prop,date:obj[prop].date}) 
 
    } 
 
    var last = arr.sort(function(a, b){return b.date-a.date})[0].prop; 
 
    obj[last].date = date; 
 
} 
 
addNew(Date.now() + 100); 
 
console.log(obj);

你只需要通過使用addNew(...)功能爲了這個工作,以新的屬性添加到該對象。