Javascript 按值删除数组-实时数据

Javascript 按值删除数组-实时数据,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一个实时web应用程序,从Node JS接收推送事件,在Javascript中添加和删除数组。我发现,在通过匹配值的索引执行典型拼接以移除项之后,数组的大小会如预期的那样减小,但有时元素不会被移除 我的理论是,实时数据在阵列中的不同位置并行地添加和删除,有时索引位置在即将进行拼接时会过时 如果索引一直在更改,如何实时按值从数组中删除项 for(var i=0; i<data.geometries.length; i++) { if(data.geometries[i].id =

我有一个实时web应用程序,从Node JS接收推送事件,在Javascript中添加和删除数组。我发现,在通过匹配值的索引执行典型拼接以移除项之后,数组的大小会如预期的那样减小,但有时元素不会被移除

我的理论是,实时数据在阵列中的不同位置并行地添加和删除,有时索引位置在即将进行拼接时会过时

如果索引一直在更改,如何实时按值从数组中删除项

for(var i=0; i<data.geometries.length; i++) {
    if(data.geometries[i].id == item.id) { //Found Item in Array
        //do some stuff
        data.geometries.splice(i,1); //Remove Geometry                                                                                                           
        break;
    }
}

对于(var i=0;i您可以使用
。过滤器
方法:

var result = data.geometries.filter(function (e) {
  return e.id !== item.id;
});

您需要的是稀疏数组,其中可以有一个带有间隙或孔的数组。使用splice修改数组将影响删除元素后的任何索引。因此,您可以使用常规数组作为稀疏数组,但删除项的方式不同。例如:

// array to act as sparse array
var set = [1,2,3,4];

// remove an item by value
var pos = set.indexOf(3);
if (pos !== -1) {
    // don't 'splice', just set to undefined
    set[pos] = undefined;
}
// add an item
if (set.indexOf(5) == -1) {
    set.push(5);
}
// to get the values from sparse array
var values = set.filter(function(v) { return typeof v !== 'undefined' });
console.log(values);
// => [1, 2, 4, 5] 

这样,您的索引在并行进程和线程之间保持不变。

我有元素,它按值匹配。只是当我拼接它时,数组已经更改,索引不再匹配。我如何按值删除它?您不应该更改该数组。只需创建一个新的数组。就像xdazz WriteSt一样,这很有意义,等等我用最简单的方法解决了这个问题。谢谢!这听起来很有希望,尝试一下……谢谢!我认为这也是一个很好的答案!另一个答案恰好是最简单的。谢谢!我真的很感谢大家的帮助。