> 웹 프론트엔드 > JS 튜토리얼 > 배열 반복을 사용할 때 내 함수가 정의되지 않은 값을 반환하는 이유는 무엇입니까?

배열 반복을 사용할 때 내 함수가 정의되지 않은 값을 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-13 08:12:02
원래의
415명이 탐색했습니다.

Why Does My Function Return Undefined When Using Array Iterations?

정의되지 않은 딜레마 반환: 함수 및 배열 반복의 미스터리 공개

프로그래밍 영역에서 함수와 배열을 사용할 때 공통적인 수수께끼가 발생합니다. 배열 반복. 반환문이 자주 사용되지만 결과는 여전히 정의되지 않을 수 있습니다. 이 난처한 문제의 원인을 밝혀내기 위해 키를 기반으로 배열에서 객체를 검색하려고 시도하는 getByKey라는 함수와 관련된 구체적인 사례를 살펴보겠습니다.

The Enigma

객체 배열에서 객체를 검색하기 위한 getByKey 함수는 지속적으로 정의되지 않은 값을 반환합니다. 내부 콜백 함수 내에 return 문이 있음에도 불구하고 이 수수께끼 같은 동작은 개발자를 당황하게 했습니다.

해결 방법 탐색

조사 결과 return 문이 문은 forEach 메서드에 제공된 콜백 함수 내에서 실행되며, 이는 getByKey 함수 자체에서 반환하는 것과 동일하지 않습니다. 이 문제를 해결하려면 forEach 대신 맵 메서드를 활용하도록 코드를 수정하거나 반복 프로세스에 대한 더 많은 제어를 제공하는 기존 for 루프를 선택할 수 있습니다.

최적화된 코드 with Map

map 메소드를 사용하여 배열을 원하는 결과가 포함된 새 배열로 변환합니다. 원래 배열의 각 요소에 대해 키를 검색하고 일치하는 객체를 반환하는 콜백 함수를 적용합니다.

function getByKey(key) {
    return data.map(function (val) {
        if (val.Key === key) {
            return val;
        }
    }).filter(function (val) {
        return val !== undefined;
    })[0];
}
로그인 후 복사

For 루프를 사용한 단순화된 솔루션

효율성을 높이기 위해 for 루프를 사용하여 배열 요소를 반복할 수 있습니다. 이 접근 방식은 루프에 대한 직접적인 제어를 제공하고 일치하는 개체가 발견되면 즉시 중단할 수 있게 해줍니다.

function getByKey(key) {
    for (var i = 0; i < data.length; i++) {
        if (data[i].Key === key) {
            return data[i];
        }
    }
}
로그인 후 복사

미묘함 이해

주의하는 것이 중요합니다. forEach의 콜백 함수는 포함 함수에서 직접 반환되지 않습니다. 콜백 내의 return 문은 콜백 자체의 실행에 영향을 주지만 둘러싸는 함수의 실행 흐름에는 영향을 미치지 않습니다. 따라서 배열 반복 함수를 사용할 때 return 문의 위치를 ​​신중하게 고려하는 것이 중요합니다.

위 내용은 배열 반복을 사용할 때 내 함수가 정의되지 않은 값을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿