상황
과거의 코드를 보고 의문이 들었고, 더 좋은 방법을 찾아내어 기록합니다.
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()를 사용하는 게 더 적합합니다.