获取最早的日期

时间:2016-09-30 20:39:09

标签: javascript

我遇到的情况是我需要在对象中存储一些数据,但由于浏览器的限制,我只能拥有一定数量的数据。由于我的应用程序还需要能够获取此数据,因此我将其存储在属性的键是标识符的对象中。

数据如下所示:

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

last_updated当然是Date.now()字符串。此对象不能超过6个属性。当它达到那个长度时,我需要开始用新数据替换最旧的属性。如何获取对象的最旧属性?

3 个答案:

答案 0 :(得分:2)

一种方法是按上次更新的时间戳排序对象键,然后弹出最后一个,最旧的时间戳

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

答案 1 :(得分:0)

这将从memory对象中获取最新的6个项目。

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会将带有两元组的数组转换回对象。

答案 2 :(得分: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(...)函数向对象添加新属性,以便使其正常工作。