JavaScript 项目从数组中消失

标签 javascript arrays

我有一个名为 objs 的数组,其中包含我的所有应用程序对象。根据应用程序中发生的情况,在此列表中添加或删除对象。

我遇到这个问题,某些对象有时会消失(或被覆盖)。如果我单步执行添加和删除函数,应用程序始终会按预期运行,但多次在没有调试器的情况下运行时,添加到列表末尾的一两个对象会从列表中消失。

对象被添加到数组中,如下所示:

this.objs[this.objs.length]=obj;

并从数组中删除,如下所示:

for(var i=0;i<this.objs.length;i++)
     if(this.objs[i]==obj)
           return this.objs.splice(i,1);

我将此代码放在添加和删除函数的末尾:

console.log("add! ");
console.log(this.objs);

链接是 session 期间对象消失的控制台日志的图像:http://ilujin.com/error.png

顶部显示的列表中的前 4 个对象应在整个 session 期间保留在列表中,但索引 3 处的对象(以红色突出显示)会被下一个添加的对象(以蓝色突出显示)覆盖。

另一个奇怪的事情是,显示的第二个列表已经包含了所有更改(删除了 4 个对象,添加了 1 个对象),尽管删除函数只被调用了一次,而添加函数根本没有被调用。

这让我得出结论,问题在于时间 - 如果在调用下一个添加之前一个添加尚未完成,则第一个添加将被覆盖。所有控制台打印都是相同的,因为它们都发生在控制台可以读取和打印之前。

这有道理吗?出于某种原因,我认为 JS 从未运行并行代码,只有在最后一个函数完成后才转向新函数。问题是我在添加到列表时使用 objs 列表的长度作为新索引吗?

如何解决这个问题?我无法弄清楚,调试器和控制台已被证明毫无用处。

这是应用程序:http://iioengine.com/neuro/study2.htm

您只需要输入一个id,看看是否会弹出说明。如果他们这样做了,那么它就会工作并刷新。如果没有,则意味着文本对象被覆盖。

最佳答案

使用 Javascript 的数组方法确实会更好。

添加到数组:

this.objs.push(obj);

从数组中删除:

this.objs.splice(this.objs.indexOf(obj), 1);

另请注意,splice 会编辑原始数组并返回已删除的元素。从有限的代码示例中很难看出,但这也可能会导致问题。

关于JavaScript 项目从数组中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023052/

相关文章:

javascript - 在 Highcharts 中追加数据值

javascript - 将 MySQL 查询结果传递给 JavaScript 函数

javascript - 函数调用时出现无效参数错误,特别是 IE 和 FF

javascript - 如何使用 JavaScript 制作工作 header ?

arrays - 每 2 列切片矩阵

javascript - & 符号获取子级/父级集合

java - java 将数组元素按顺序插入数据库

php - 将php数组插入mysql

python - 使用 NumPy 高效返回带有小数分量的插入点索引

python - 在 Numpy 数组的列中进行条件替换