Programming Language/JS & TS

[JS] every 메소드로 객체 속 값 비교하기

monkeykim 2024. 10. 22. 23:14

JavaScript에서 배열이나 객체의 값을 비교할 때 every 메소드는 아주 유용하다. 이 메소드는 배열의 모든 요소가 주어진 조건을 만족하는지 확인해주는데, true나 false를 반환하는 게 특징이다. 객체의 속성값을 비교할 때도 이를 잘 활용하면 깔끔하게 비교 작업을 처리할 수 있다.

every 메소드 

every 메소드는 배열의 모든 요소가 특정 조건을 만족하는지 확인할 때 사용된다. 모든 요소가 조건을 만족하면 true, 하나라도 만족하지 않으면 false를 반환한다.

const numbers = [2, 4, 6, 8];
const allEven = numbers.every(num => num % 2 === 0);
console.log(allEven); // true

위 코드에서는 배열 numbers의 모든 요소가 짝수인지를 확인한다. 짝수일 경우 true를 반환하고, 하나라도 홀수가 있으면 false를 반환한다.

객체의 값을 비교할 때 ===를 사용하면 안되는 이유

객체를 비교할 때는 === 연산자를 사용할 수 없다. === 연산자는 기본적으로 객체의 참조(Reference)를 비교하기 때문이다. 즉, 두 객체가 메모리 상에서 동일한 위치를 참조하고 있으면 true를 반환하지만, 구조가 같아도 서로 다른 메모리 주소를 참조하고 있으면 false를 반환한다.

const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };

console.log(obj1 === obj2); // false

위 예시에서 obj1과 obj2는 동일한 값을 가지고 있지만, 서로 다른 객체이므로 === 연산자는 false를 반환한다. 이처럼 객체의 값을 비교할 때는 각 속성 값을 하나하나 비교해야 한다. 하지만, 일일이 비교하는 건 코드가 복잡해지기 때문에 이를 간단하게 처리하기 위해 every 메소드를 사용할 수 있다.

객체 값을 비교할 때 every를 사용해야 하는 이유

객체를 속성별로 비교할 때 every 메소드를 사용하면 코드가 훨씬 간결해지고 가독성이 좋아진다. every는 배열을 순회하며 조건을 만족하는지를 판단하는데, 객체의 속성 값도 Object.keys()로 배열화하여 순회할 수 있다. 이를 이용해 객체의 각 속성 값이 같은지를 비교하면, 복잡한 비교 로직을 간단하게 처리할 수 있다.

예를 들어, 두 명의 학생의 성적을 비교한다고 해보자. 두 객체의 각 속성(과목)이 동일한지 확인하려면 아래처럼 every를 사용할 수 있다.

const studentA = {
  math: 90,
  english: 85,
  science: 92
};

const studentB = {
  math: 90,
  english: 85,
  science: 92
};

function compareScores(student1, student2) {
  return Object.keys(student1).every(subject => student1[subject] === student2[subject]);
}

const sameScores = compareScores(studentA, studentB);
console.log(sameScores); // true

여기서는 학생 A와 학생 B의 각 과목 점수가 동일한지를 every로 비교했다. Object.keys()로 각 객체의 속성을 순회하며 두 학생의 각 속성 값(과목 점수)이 동일한지 확인한다. 모든 과목 점수가 동일할 때만 true, 하나라도 다르면 false를 반환한다.

이처럼 every를 사용하면 배열뿐만 아니라 객체 속의 값들도 간단하게 비교할 수 있다. 복잡한 구조일수록 every의 활용도가 높아지며, 객체의 모든 속성이 특정 조건을 만족하는지를 간결하게 확인할 수 있다. ===를 사용할 수 없는 상황에서는 every와 같은 메소드를 이용한 값 비교가 아주 효율적이다.