[javascript] 객체의 속성 값을 기준으로 중복 허용하기

자바스크립트에서 객체(Object)는 속성(Key)와 값을 가지는 데이터 타입입니다. 때로는 객체의 속성 값을 기준으로 중복된 값들을 허용해야 하는 경우가 있습니다. 이번 글에서는 이러한 상황에서 중복 값을 처리하는 방법에 대해 알아보겠습니다.

1. 배열을 사용하여 중복된 값 처리하기

가장 간단한 방법은 배열을 사용하여 중복된 값을 처리하는 것입니다. 객체의 속성 값을 배열로 저장하고, 새로운 값이 추가될 때마다 중복 여부를 확인하는 방법입니다.

const obj = {
  prop1: [1, 2, 3],
  prop2: [4, 5, 6],
};

function addValue(propertyName, value) {
  if (obj.hasOwnProperty(propertyName)) {
    const arr = obj[propertyName];
    if (!arr.includes(value)) {
      arr.push(value);
    }
  } else {
    obj[propertyName] = [value];
  }
}

addValue('prop1', 1); // 이미 중복된 값이므로 추가되지 않음
addValue('prop1', 4); // 중복되지 않은 값이므로 추가됨
addValue('prop2', 2); // 중복되지 않은 값이므로 추가됨

console.log(obj);
// 출력: { prop1: [1, 2, 3, 4], prop2: [4, 5, 6, 2] }

위 코드에서 addValue 함수는 속성 이름과 값을 매개변수로 받아서 중복 여부를 확인하고, 중복되지 않은 값만 배열에 추가합니다. 객체에 해당 속성이 없는 경우에는 새로운 속성을 추가하고, 중복 여부는 체크하지 않습니다.

2. Set 객체를 사용하여 중복된 값 제거하기

ES6부터 도입된 Set 객체는 중복을 허용하지 않는 값들의 집합을 나타내는 자료구조입니다. 이를 활용하여 객체의 속성 값들을 중복 없이 저장할 수 있습니다.

const obj = {
  prop1: new Set([1, 2, 3]),
  prop2: new Set([4, 5, 6]),
};

function addValue(propertyName, value) {
  if (obj.hasOwnProperty(propertyName)) {
    const set = obj[propertyName];
    set.add(value);
  } else {
    obj[propertyName] = new Set([value]);
  }
}

addValue('prop1', 1); // 이미 중복된 값이므로 추가되지 않음
addValue('prop1', 4); // 중복되지 않은 값이므로 추가됨
addValue('prop2', 2); // 중복되지 않은 값이므로 추가됨

console.log(obj);
// 출력: { prop1: Set(3) {1, 2, 3, 4}, prop2: Set(4) {4, 5, 6, 2} }

위 코드에서도 addValue 함수는 속성 이름과 값을 매개변수로 받아서 중복 여부를 체크하고, 중복되지 않은 값만 Set 객체에 추가합니다. 객체에 해당 속성이 없는 경우에는 새로운 속성을 추가하고, 중복 여부를 체크하지 않습니다.

마무리

이번 글에서는 JavaScript의 객체 속성 값을 기준으로 중복된 값들을 처리하는 방법에 대해 알아보았습니다. 배열이나 Set 객체를 활용하여 중복 값을 제거하거나, 중복을 체크하는 방식으로 처리할 수 있습니다. 상황에 따라 가장 효율적인 방법을 선택하여 중복 문제를 해결해보시기 바랍니다.


참고자료: