배열 내에 특정 항목이 존재하는지 검사할 때에는 보통 Array.indexOf() 메소드를 사용합니다.


    예)

    let Arr = ["a","b","c"];

    Arr.indexOf("a"); //  0

    Arr.indexOf("d"); //  -1


    위의 예와 같이 배열에 특정 항목이 있는경우 0또는 0보다 큰 값을 return하고 항목을 찾을 수 없는 경우 음수를 return합니다.


    그런데 객체로 구성된 배열에서 객체의 특정 key값이 특정 value인 객체가 존재하는지 확인하려면 어떻게 해야할까요?


    먼저 반복문으로 구현해 볼 수 있겠습니다.

    let Arr = [

        { name:"a", pass:"b"},

        { name:"b", pass:"t"},

        { name:"c", pass:"f"},

        { name:"d", pass:"e"},

      ];

    let isInclude = false;

    for(let i=0,l=Arr.length;i<l;i++){

      if(Arr[i].name==="a") {

        isInclude = true;

        break;

      }

    }// isInclude === true


    isInclude = false;

    for(let i=0,l=Arr.length;i<l;i++){

      if(Arr[i].name==="e") {

        isInclude = true;

        break;

      }

    }// isInclude === false


    그런데 Array.some() 메소드를 사용하면 이렇게 간단하게 줄일 수 있습니다.

    let Arr = [

        { name:"a", pass:"b"},

        { name:"b", pass:"t"},

        { name:"c", pass:"f"},

        { name:"d", pass:"e"},

      ];

    Arr.some(e=>e.name==="a") //true

    Arr.some(e=>e.name==="e") //false

    내부적으로는 물론 반복문을 통해 작동하지만 훨씬 간결한 코드가 되었습니다.


    물론 arrow function을 지원하는 브라우저에서만 가능합니다. 즉 IE는 지원하지 않습니다.

    arrow functions 지원 현황 : https://caniuse.com/#search=arrow









    Posted by 뭐하라

    문제가 있나요?(?)

    내용상 오류가 있음 업데이트 필요 화면이 깨짐 기타 수정이 필요함

티스토리 툴바