我在这里问了一个类似的问题: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留在数组中?
答案 0 :(得分:3)
您应该使用过滤器代替grep,如下所示:
networks = networks.filter(function (o,i) {
return o.id !== name ? ((obj = o), true) : false;
});