본문 바로가기

개발

[JS 의문] 배열 요소 확인에는 어떤 걸 사용해야 좋을까?

상황

과거의 코드를 보고 의문이 들었고, 더 좋은 방법을 찾아내어 기록합니다.

if(!Arr.find()) {
 // next job
}

위와 같이 코드가 짜여있었고, if 문을 사용해 배열 내부에 원하는 요소가 있는지 확인하고 있다면 다음 작업을 진행하려는 과정입니다. 여기서 왜 findIndexOf()가 아닌 find()를 사용했는가에 대한 의문이 들었습니다.

 

Array.find() vs Array.findIndexOf()

  • find(): 내부에 요소가 있다면 요소를 반환하고, 없다면 undefined를 반환
  • findIndexOf(): 내부에 요소가 있다면 인덱스를 반환하고, 없다면 -1을 반환

위 코드에서 사용한 조건문을 사용한다면 js에서 falsy 한 값들로 인해 오류가 발생할 수 있습니다. 그렇기에 둘 중 하나를 사용한다면 findIndexOf()를 사용하는 것이 더 좋습니다.

 

하지만 더 좋은 Array.some() 또는 Array.every()를 이용하는 방법이 있습니다.

  • some(): 배열 전체를 탐색하며 callback의 결괏값이 하나라도 true인 경우 즉시 반복을 중단하고 true를 반환합니다.
  • every(): 배열 전체를 탐색하며 모든 callback의 결괏값이 true일 때 true를 반환합니다. 중간에 false 값이 나오면 반복을 중단하고 false를 반환합니다.

왜 더 좋은가라고 물어보면 반환값의 차이가 있습니다. 기존 코드에서 원했던 것은 배열 내부의 찾는 요소가 있는가에 대한 결과를 원했고 이는 인덱스나 요소보다 Boolean을 반환하는 some()이나 every()를 사용하는 게 더 적합합니다.