按值删除数组 - 实时数据

时间:2014-06-17 17:17:27

标签: javascript arrays node.js

我有一个实时网络应用程序,接收来自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;
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用.filter方法:

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

答案 1 :(得分:0)

你需要的是一个稀疏数组,你可以在这里有一个带有间隙或孔的数组。使用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] 

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