如何根据javascript中的条件从数组中删除重复的对象

时间:2013-12-26 07:57:12

标签: javascript jquery ajax

我正在尝试删除数组中存在的重复对象。这是我的对象看起来像 我的对象包含以下属性:

function cell(cell_id,x,y){
 this.cell_id = cell_id;
 this.x = x;
 this.y = y;
 }
var cellArray = new Array();

将包含“单元格对象”数据,这里是我的单元格信息

{cell_id:'a',x:250,y:45} -
{cell_id:'b',x:145,y:256}
{cell_id:'a',x:123,y:356}

就像那样,即使x和y的值不同,但我仍然认为3号细胞是1号细胞的复制品。我检查了qn's,但它们对我没有帮助 Removing duplicate objects Remove Duplicates from JavaScript Array 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

function removeDupIds(array) {
    var list = {}, id;
    for (var i = 0; i < array.length; i++) {
        id = array[i].cell_id;
        if (id in list) {
            // found a dup id, remove it
            array.splice(i, 1);
            // correct for loop index so it will process the item
            // that just moved down in place of the one we just removed
            --i;
        } else {
            // add the id to our map
            list[id] = true;
        }
    }
}

这使用临时的id贴图来跟踪数组中已遇到的ID。当它找到一个已存在于映射中的id时,它会从数组中删除该元素并递减for循环索引,以便它将处理刚下拉到数组中的下一个元素而不是我们的那个刚刚删除。

答案 1 :(得分:0)

您可以维护一个单独的数组来保存所有不同的cell_id,然后过滤cellArray以获得结果

cellArray.filter(function (e, i) {
    if (i===0) {
        unique = []; //you'll have to control the scope of this variable. It's global right now
    }
    if (unique.indexOf(e.cell_id) === -1) {
        unique.push(e.cell_id);
        return e;
    }
});

在此解决方案中,如果cell_id类中有两个或更多具有相同cell类的实例存在于具有较低索引的cellArray中(换句话说,一个将保留在循环遍历数组时首先出现,并且将忽略任何后续实例。如果您想应用其他条件,则必须修改代码。