数组轮回删除的题目

题目形貌

简朴的需求,要删除数组中不符合前提的元素。

毛病完成

最初的完成,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);
    });
}
    原文作者:张喜硕
    原文地址: https://segmentfault.com/a/1190000015898486
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞