我有一个像这样的二维数组:
var rawData = [
[1325347200000, 60], [1328025600000, 100], [1330531200000, 15], [1333209600000, 50]
];
//MEMORY
mem.push([
iteration,
memory.usage / (1024*1024)
]);
持续增长。我想将大小限制为20,所以我想删除数组中最旧的元素。我尝试了这个,但删除了一个元素,但不断增长
//Remove first
if(iteration % 20 === 0) {
rawData = rawData.splice(1);
}
答案 0 :(得分:0)
我会实现一个自己的推送方法来移除整个数组:
class LimitedArray extends Array {
constructor(max, ...args){
super(max);
this.push(...args);
}
push(...els){
for(let i = els.length; i < this.length; i++)
this[i - els.length] = this[i];
for(let i = 0; i < els.length; i++)
this[i + this.length - els.length] = els[i];
}
}
所以可以这样做:
const cache = new LimitedArray(20);
cache.push(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
cache.push(22);
如果你真的想这样做“内联”,你可以这样做:
mem.push([1,2]);
if(mem.length > 20) mem.shift();
或者如果它不准确且mem可能超过21:
mem.push([1,2],[3,4]);
if(mem.length > 20) mem.splice(0, mem.length - 20);
正如评论中所建议的那样,可以简化为:
mem.push([1,2], [3,4]);
mem = mem.slice(-20);
但是,这可能会降低性能并降低内存效率。