如何通过id删除特定对象并将其重新添加到Array [jQuery]

时间:2014-02-21 16:46:39

标签: javascript jquery arrays object

我在这里问了一个类似的问题:How to remove and save object from Array

当我只需要检查对象的类型(“组”或“组织”)时它工作但是我现在需要更具体,需要按ID查找对象并删除/重新添加到数组中

然而,当我尝试调整代码以检查Object的id时,我要么找不到并删除ID,要么最终从数组中删除所有对象。

// re-add Group to networks (This works great)
if (isChecked === 'checked') {

    var group_obj = {
        'id': name
    }

    networks.push(group_obj);

// remove Group from networks (Problem exist in the else if)
} else if (isChecked === undefined) {

    var group_obj = {
        'id': name
    }

    var removeItem = group_obj;

    var obj;
    networks = $.grep(networks, function(o,i) {

        console.log('removeItem.id = '+removeItem.id);
        console.log('name = '+name);

        if (removeItem.id === name) {
            obj = o;
            return true;
        }
        return false;
    }, true);
}

console.log(networks);

控制台
在对复选框执行操作之前,我的网络阵列是什么样的:

[Object, Object, Object]

0: Object
    count: 1
    id: 6
    label: "Who"
    type: "Organization"

1: Object
    id: 12622

2: Object
    id: 13452

如果取消选中相应组的复选框,则上面的当前代码将删除删除阵列中的所有对象,而不仅仅是指定的组对象。

[]

如果再次选中该复选框,则所选组将进入阵列。

我最初也试过这个:

var obj;
networks = $.grep(networks, function(o,i) { 
    return o.id === name ? ((obj = o), true) : false;
}, true);

然而,它再次找不到并删除具有指定id(name)的数组中的Object,但它保持网络阵列不受影响。

你如何编写else if语句来纠正只删除具有指定id的Object并将其余的Objects留在数组中?

1 个答案:

答案 0 :(得分:3)

您应该使用过滤器代替grep,如下所示:

networks = networks.filter(function (o,i) {
     return o.id !== name ? ((obj = o), true) : false;
});