ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Array.forEach()
    STUDY/프론트엔드 2021. 5. 6. 15:33

     

    개발을 하면서 아래와 같이 객체의 invalid를 check할 때 Array.forEach()를 사용했는데, subject.Name에 값이 없어도 함수가 반환되지 않고 다음 동작을 실행하는 문제가 발생했다.

     

    isInvalid(grade) {
        if (this.$StringUtils.isBlank(grade.name)) {
            return true;
        }

        grade.subjectList.forEach(subject -> {
            if (this.$StringUtils.isBlank(subject.Name)) {
                return true; 
            }
        });

        if (this.$StringUtils.isBlank(grade.year)) {
            return true;
        }

        return false;
    }

     

    return true/false를 하면 다른곳에서 사용하는 것과 같이 함수가 호출한 곳으로 반환될 것이라 생각했는데, 찾아보니까 Array.forEach()에서의 return true/false는 continue/break와 같은 방식으로 사용된다고 나왔다.

     

    아래와 같이 for문으로 변경해서 문제를 해결할 수 있었다.

     

     for (let i = 0, length = grade.subjectList.length; i < length; i++) {
            let subject = grade.subjectList[i];
            if (this.$StringUtils.isBlank(subject.Name)) {
                return true; 
            }
        }

     


    * Array.forEach(), Array.every(), Array.some()에서의 return true/false 동작

     

    1. Array.forEach()

    • return true/false 둘 다 continue를 의미한다.
    • forEach() 자체의 return은 undefined이다.

     

    ["a","b","c","d","e"].forEach(function(value, index){
        if (value=="b") return true;
        console.log(value);
    });


    [결과]
    a
    c
    d
    e
    < undefined

    ["a","b","c","d","e"].forEach(function(value, index){
        if (value=="b") return false;
        console.log(value);
    });


    [결과]
    a
    c
    d
    e
    < undefined

     

    2. Array.event()

    • return true는 continue, false는 break를 의미한다.

     

    ["a","b","c","d","e"].every(function(value, index){
        if (value=="a") return false;
        console.log(value);
    });

    [결과] 


    ["a","b","c","d","e"].every(function(value, index){
        if (value=="a") return true;
        console.log(value);
    });

    [결과]
    b

     

    • every() 자체의 return은 모든 callback function의 반환값이 true 여야 true, 아니면 false이다.

     

    const isBelowThreshold = (currentValue) => currentValue < 40;

    const array1 = [1, 30, 39, 29, 10, 13];
    console.log(array1.every(isBelowThreshold));

    [결과] : true


    const isBelowThreshold = (currentValue) => currentValue < 30;

    const array1 = [1, 30, 39, 29, 10, 13];
    console.log(array1.every(isBelowThreshold));

    [결과] : false

     

    3. Arrya.some()

    • return true는 break, false는 continue를 의미한다.

     

    ["a","b","c","d","e"].every(function(value, index){
        if (value=="b") return true;
        console.log(value);
    });


    [결과] 
    a


    ["a","b","c","d","e"].every(function(value, index){
        if (value=="a") return false;
        console.log(value);
    });

    [결과]
    a
    c
    d
    e

     

    • some() 자체의 return은 callback function에 의해 하나라도 return true 가 나오면 true, 아니라면 false이다.

     

    const array = [1, 2, 3, 4, 5, 6];

    const even = (element) => element % 6 === 0;
    console.log(array.some(even));

    [결과] : true


    const array = [1, 2, 3, 4, 5];

    const even = (element) => element % 6 === 0;
    console.log(array.some(even));


    [결과] : false

     

    tod2.tistory.com/198

    'STUDY > 프론트엔드' 카테고리의 다른 글

    JavaScript : Array  (0) 2021.06.02
    Vue.js  (0) 2021.04.28
    Ajax Cache  (0) 2021.04.28
    Cookie  (0) 2021.02.08
    History.replaceState()  (0) 2021.02.04
Designed by Tistory.