You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何移除二维数组最旧元素?实现数组大小限制至20的方法

正确限制二维数组大小为20的实现方式

我来帮你分析下问题所在,然后给出靠谱的解决办法~

首先看你原来代码的两个核心问题:

  1. 触发时机不对:你只在iteration % 20 === 0时执行移除操作,但这时候数组可能已经远超20个元素了(比如每次iteration都往数组里加元素,到iteration=21时数组已经21个了,但你的代码要等到iteration=20才执行,中间数组会持续增长)。
  2. splice用法错误rawData.splice(1)会删除从索引1到数组末尾的所有元素,返回这些被删元素,你把rawData赋值为这个返回值——这相当于把数组变成原数组从第二个元素开始的部分,而不是移除最旧的第一个元素。比如原数组有20个元素,执行后会变成19个,之后push又回到20,下次触发时又变成19,数组大小一直在波动,根本没限制住最大长度。

正确的实现思路

应该在每次向数组添加元素之后,立即检查数组长度:如果超过20,就移除最旧的元素(也就是数组的第一个元素)。这样不管数组怎么增长,都能始终保持最多20个元素。

方法一:每次push后检查并移除(最直观)

// 假设你添加新元素的代码是这样的
rawData.push([newTimestamp, newValue]);

// 添加后立刻检查长度,超过20就删掉最旧的第一个元素
if (rawData.length > 20) {
    rawData.shift(); // shift()专门移除数组第一个元素,返回被移除的值
}

方法二:一次性移除所有多余元素(更灵活)

如果有时候会一次性添加多个元素,或者担心数组长度突然超过20很多,可以用splice一次性清理所有多余的旧元素:

rawData.push([newTimestamp, newValue]);

// 如果长度超过20,计算需要删除的数量,从索引0开始删
if (rawData.length > 20) {
    rawData.splice(0, rawData.length - 20);
}

比如数组长度是25,rawData.length - 20就是5,这会直接删除前5个最旧的元素,把数组长度拉回20。

替换你的错误代码

把你原来这段代码:

//Remove first
if(iteration % 20 === 0) { 
    rawData = rawData.splice(1); 
}

替换成上面两种方法中的任意一种,放在你向rawData添加新元素的代码之后,就能完美限制数组大小为20了。

内容的提问来源于stack exchange,提问作者user9252059

火山引擎 最新活动