首頁 >web前端 >js教程 >js教程 - 數組循環刪除錯誤實現與解決方案

js教程 - 數組循環刪除錯誤實現與解決方案

php是最好的语言
php是最好的语言原創
2018-08-06 15:59:072367瀏覽

問題描述

簡單的需求,要刪除陣列中不符合條件的元素。

錯誤實現

最初的實現,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn