题目形貌
简朴的需求,要删除数组中不符合前提的元素。
毛病完成
最初的完成,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);
});
}