我遇到的情况是我需要在对象中存储一些数据,但由于浏览器的限制,我只能拥有一定数量的数据。由于我的应用程序还需要能够获取此数据,因此我将其存储在属性的键是标识符的对象中。
数据如下所示:
memory = {
13: {
last_updated: 241,
...
},
26: {
last_updated: 363,
....
}
}
last_updated
当然是Date.now()
字符串。此对象不能超过6个属性。当它达到那个长度时,我需要开始用新数据替换最旧的属性。如何获取对象的最旧属性?
答案 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; }, {});
简短说明
Object.keys
结合.map
方法会将对象转移到包含两元组的数组(键和值).sort
将按last_updated
按相反顺序对数组进行排序.slice
将采用前6项.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(...)
函数向对象添加新属性,以便使其正常工作。