>  기사  >  웹 프론트엔드  >  Node.js 튜토리얼 - 배열 루프 삭제 오류 구현 및 해결 방법

Node.js 튜토리얼 - 배열 루프 삭제 오류 구현 및 해결 방법

php是最好的语言
php是最好的语言원래의
2018-08-06 15:59:072325검색

문제 설명

간단한 요구 사항은 배열의 조건을 충족하지 않는 요소를 삭제하는 것입니다.

잘못된 구현

초기 구현인 foreach 루프가 잘못된 것으로 확인되었습니다. 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);
    });
}

삭제할 때마다 기준으로 삭제되는데, 삭제 후에는 배열의 길이가 바뀌어 다음에는 기준으로 삭제되게 됩니다. time , 길이가 변경되었으며 삭제하려는 요소의 위치도 변경되었음을 확인했습니다.


해결책

Java에서는 iterator 메서드를 사용하여 반복자 개체를 가져온 다음 수정합니다. rrreee관련 글:

for 루프가 JavaScript에서 배열 요소의 내용을 삭제할 때 발생하는 문제

🎜🎜🎜배열 루프에 대한 질문🎜🎜

위 내용은 Node.js 튜토리얼 - 배열 루프 삭제 오류 구현 및 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.