如何从2d数组中删除元素

时间:2018-01-22 15:21:45

标签: javascript jquery

我有一个像这样的二维数组:

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);
}

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);
但是,这可能会降低性能并降低内存效率。