我正在尝试监视数组,当其中有10个元素时,我想清除数组。我尝试使用代理,但无法清除阵列。我想要实现的是,我试图将一些数据从eventlisteners推入数组,当数组长度达到10时,我想将数据发送到服务器并清除数组。
答案 0 :(得分:2)
您可以通过重写数组的push方法来做到这一点,
function getArrayWithLimitedLength(length) {
var array = new Array();
array.push = function () {
if (this.length >= length) {
this.splice(0,this.length)
}
return Array.prototype.push.apply(this,arguments);
}
return array;
}
创建一个长度为3的数组
var array = getArrayWithLimitedLength(3);
一旦添加了第4个元素,前面的3个元素将被删除,最后一个元素将被添加为第一个元素。
您可以使用this.splice(0,this.length)
,this.length = 0
清除数组
或
while(this.length > 0) {
this.pop();
}
示例:
array.push(1) // array-> [1]
array.push(2) // array-> [1,2]
array.push(3) // array-> [1,2,3]
array.push(4) // array-> [4]
答案 1 :(得分:0)
您可以检查数组是否包含10个元素,然后调用函数以发送数组。然后通过将长度设置为零来清空数组。
function sendArray(array) {
console.log(...array);
}
var array = [];
setInterval((i => () => {
array.push(i++);
if (array.length === 10) {
sendArray(array);
array.length = 0;
}
})(0), 100);
答案 2 :(得分:0)
实施您自己的myPush
方法:
Array.prototype.myPush = function(element, maxLengthBeforeFlush= Infinity) {
this.push(element);
if (this.length > maxLengthBeforeFlush) {
// code to send this to the server
this.length = 0;
}
}
var arr = [];
<button type="button" id="pushToArr" onclick="arr.myPush('a', 5); console.log(arr);">Click to push to arr[]</button>