Javascript JS:如果找到元素,如何从数组中移除元素?

Javascript JS:如果找到元素,如何从数组中移除元素?,javascript,Javascript,因此,我使用这段代码在数组中查找一个值,并在找到时将其删除: var index2 = myarray.indexOf(mystring); if(index2 > -1){ myarray.splice(index2, 1); } 然而,myarray经常变化。所以有时候,你认为当我拼接时,index2值可能不再正确吗 如果发现一个数组中的值并确保在100%时删除了该值,我如何从该数组中删除该值 所以有时候,你认为当我拼接时,index2值可能不再正确吗 不在绝大多数JavaScr

因此,我使用这段代码在数组中查找一个值,并在找到时将其删除:

var index2 = myarray.indexOf(mystring);
if(index2 > -1){
  myarray.splice(index2, 1);
}
然而,myarray经常变化。所以有时候,你认为当我拼接时,index2值可能不再正确吗

如果发现一个数组中的值并确保在100%时删除了该值,我如何从该数组中删除该值

所以有时候,你认为当我拼接时,index2值可能不再正确吗

不在绝大多数JavaScript环境中,不,因为在那些环境(浏览器、NoDEJs等)中,访问该数组的所有代码都在单个线程上运行,在处理任务时(在HTML规范调用它们时,ES6规范称之为作业)是不会中断的。(除了Firefox中的

alert
和类似的一些边缘情况外,但是您的代码没有使用它们。)因此,如果它们是一个接一个的,则在
索引之后
之前,而在
拼接之前,不会出现任何情况

有些环境中JavaScript不是单线程的。最常见的是Java虚拟机,它可以通过Rhino和Nashorn(“nass horn”)脚本引擎运行JavaScript代码


浏览器上也可以通过via有多个线程,但它们只能通过消息进行通信,因此两个单独的线程不能更新同一数组。

在您发布的代码中,在调用
indexOf
和调用
splice
之间不会发生任何操作。即使在将修改数组的事件循环中等待的异步操作,这些操作也会在代码之前或之后发生,而不会在中间发生。

您应该是好的。如果您非常关心,您可以查看哪些操作与您的代码基本相同,或者帮助您操作数组。

如果在不同的setTimeOut中调用我的代码,该怎么办?如此异步。(我使用的是node.JS)@lodata:如果你有
indexOf
,然后你在传递给
setTimeout
nextTick
的函数中有
splice
,那么当然,在
indexOf
之后和
splice
之前可以给线程一些其他东西。但我想不出你为什么要那样做。您应该在调用
splice
之前立即执行
indexOf
。好的!谢谢你的回答!