问题描述
简单的需求,要删除数组中不符合条件的元素。
错误实现
最初的实现,foreach
循环,发现就是不对。
// 如果学科存在id
if (discipline.id) {
// foreach类别
angular.forEach(result, function(value, key) {
// 如果该类别有对应学科(考虑到“请选择的情况下”会报从undefined上获取id)
// 并且该学科类别id不等于传入学科id
if (value.discipline && !angular.equals(value.discipline.id, discipline.id)) {
// 移除不符合要求的元素
result.splice(key, 1);
}
});
}
每次删除时,都是根据key
进行删除的,但是删除之后,数组的长度就会发生变化,导致下次再根据key
去删除,发现长度变了,我们想删除的元素的位置也变了。
解决方案
在Java
中,我们使用iterator
方法拿到其迭代对象,然后对其进行修改。
// 如果学科存在id
if (discipline.id) {
/**
* 数组过滤
* 接收一个函数,根据该函数返回为true/false
* 决定该元素保留还是删除
*/
result = result.filter(function(value) {
// 兼容请选择项,默认保留
if (!value.discipline) {
return true;
}
// 保留器具类别的学科id与当前学科id相同的项
return angular.equals(value.discipline.id, discipline.id);
});
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。