[JS]Array.some() 메소드, 배열 내 특정 객체 찾기
배열 내에 특정 항목이 존재하는지 검사할 때에는 보통 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