방명록
- [JavaScript] filter(), some() 배열 메서드를 이용해 두 배열 간 일치하지 않는 객체 요소 구하기2024년 02월 21일 09시 25분 59초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. 두 배열에서 일치하지 않는 객체 요소 구하기
const arr1 = [{ id: 1, name: "a" }, { id: 2, name: "b" }]; const arr2 = [{ id: 1, name: "a" }, { id: 2, name: "b" }, { id: 3, name: "c" }];
위와 같이 객체를 요소로 가진 두 개의 배열이 있다. 이 두 배열을 비교해 일치하지 않는 객체 요소인 { id: 3, name: "c" }를 구하고자 한다.
2. filter(), some() 배열 요소 활용한 문제 해결
filter() 배열 메서드는 매개 변수로 true/false를 반환하는 콜백 함수를 가진다. some() 배열 메서드는 ||연산자와 비슷해서 요소 중 하나라도 true이면 true를 반환한다. 따라서 some() 메서드가 동작할 때 같은 요소가 없다면 false를 반환할 것이고, 이 경우에 filter()에 true가 반환될 수 있도록 some()의 반환값 false를 반전(!)하면 두 배열간에 일치하지 않는 값(들)을 구할 수 있다.
// 두 배열간에 일치하지 않는 객체 구하기 const arr1 = [{ id: 1, name: "a" }, { id: 2, name: "b" }]; const arr2 = [{ id: 1, name: "a" }, { id: 2, name: "b" }, { id: 3, name: "c" }]; const difference = arr2.filter(obj2 => !arr1.some(obj1 => obj1.id === obj2.id)); console.log(difference); // [{ id: 3, name: "c" }]
😉물론 some() 대신 find() 배열 메서드도 가능하다. 다만 이 경우에는 값 또는 -1이 반환되며 (!)를 통해 true/false로 변환됨을 기억하자!
728x90반응형'언어·프레임워크 > JavaScript' 카테고리의 다른 글
[JavaScript] Uncaught (in promise) TypeError: 데이터.forEach is not a function 에러 (1) 2024.09.06 [JavaScript] ESModule 사용시 발생하는 net::err_aborted 404 (not found) 에러 (0) 2024.04.14 [JavaScript] split() 문자열 메서드 이용해 특정 문자열의 개수 구하기 (0) 2023.12.10 [JavaScript] every 배열 메서드를 활용한 소수(prime) 판별 (0) 2023.11.18 [JavaScript] 클린코드 자바스크립트 : 객체 (0) 2023.10.25 다음글이 없습니다.이전글이 없습니다.댓글