在阵列中保留某些n个新值的最佳方法

时间:2018-06-08 20:55:15

标签: javascript node.js

我有一个内部有4个数组的对象,如下所示:

let obj = {
  A: [1,2,5,8,10,15,20],
  B: [5,1,5,8,10,18,5],
  C: [1,2,2,8,1,15,4],
  D: [1,2,1,8,8,1,3],
}

这些数组是实时填充的,因此每次新值到达时,它都会被推送到这些数组。所有4个阵列都具有相同的长度。

但我必须只保留最后50个值,所以我这样做:

if (obj.A.length > 50) {
    obj.A.shift()
    obj.B.shift()
    obj.C.shift()
    obj.D.shift()
}

是否有更好的方法可以获得与上述相同的结果?

1 个答案:

答案 0 :(得分:1)

也许有一个选项可以为你希望在Array对象上实现的方法做原型,这将限制数组中对象的数量。

选项1

在下一个示例中,您不需要每次检查第一个数组长度,然后假定其他数组的长度,并且每个数组保持它拥有状态。



Array.prototype.pushMax = function(max, value) {
  if (this.length >= max) {
    this.splice(0, this.length - max + 1);
  }
  return this.push(value);
};
const max = 3;
const arr = [];
arr.pushMax(max, 1);
arr.pushMax(max, 2);
arr.pushMax(max, 3);
arr.pushMax(max, 4);
arr.pushMax(max, 5);
console.log(arr);




选项2

如果你想在数组的开头有最新的值,你可以这样做:



Array.prototype.pushStartMax = function(max, value) {
  if (this.length >= max) {
    this.pop();
  }
  return this.unshift(value);
};
const max = 3;
const a = [];
a.pushStartMax(max, 1);
a.pushStartMax(max, 2);
a.pushStartMax(max, 3);
a.pushStartMax(max, 4);

console.log(a);