我有一个内部有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()
}
是否有更好的方法可以获得与上述相同的结果?
答案 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);