簡單的需求,要刪除陣列中不符合條件的元素。
最初的實現,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); }); }
相關文章:
JavaScript中關於for循環刪除數組元素內容時出現的問題
以上是js教程 - 數組循環刪除錯誤實現與解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!