JavaScript/배열

[JavaScript]배열에 중복 값이 있는지 확인하는 방법

DevStory 2021. 12. 1.

이번 포스팅은 JavaScript에서 배열에 중복 값이 있는지 확인하는 방법을 소개합니다.

 


프리미티브 배열(Primitive of Array)과 객체(Object)

프리미티브 배열(Primitive of Array)은 JavaScript의 원시 값을 요소로 하는 배열입니다.

JavaScript의 원시 값
string, number, bigint, boolean, undefined, null

 

다음 문자열 배열에서 'A' === 'A'는 동일하므로 true입니다.

const arr = ['A', 'A', 'B'];

console.log(arr[0] === arr[1]); // true
console.log('A' === 'A'); // true

 

다음은 객체를 요소로 가지는 배열입니다.

const arr = [
  { Age: 30},
  { Age: 30}
]

 

중복되는 요소가 포함되어 있다고 생각할 수 있지만, JavaScript 엔진은 두 객체가 동일하다고 생각하지 않습니다.

const arr = [
  { Age: 30},
  { Age: 30}
];

console.log(arr[0] === arr[1]); // false
console.log({Age: 30} === {Age: 30}); // false

프리미티브 배열(Primitive of Array)에서 중복 감지

JavaScript에는 고유한 값을 가지는 Set 컬렉션이 존재합니다.

 

Set에 배열을 전달하면, 중복 값을 제거하고 고유한 값을 가지는 새로운 컬렉션을 생성합니다.

 

새로 생성된 Set 컬렉션의 크기와 배열의 크기를 비교하여 중복이 있는지 감지할 수 있습니다.

const arr = [1, 2, 2, 3, 3, 4, 4];

const setCollection = new Set(arr);

const isDuplicate = setCollection.size < arr.length;

console.log(isDuplicate); 
// true

console.log(setCollection); 
// Set(4) {1, 2, 3, 4}

Set 컬렉션에서 크기를 가져오는 속성은 size입니다.

 

배열에서 크기를 가져오는 속성은 length입니다.


객체 배열(Array of Objects)에서 중복 감지

객체를 요소로 하는 배열에 Set 컬렉션을 활용하였지만 중복이 감지되지 않습니다.

const arr = [{Age: 30}, {Age: 30}];

const setCollection = new Set(arr);

const isDuplicate = setCollection.size < arr.length;

console.log(isDuplicate);
// false

JavaScript에서 동일한 속성, 동일한 값을 가지는 두 객체는 동일하지 않습니다.

 

두 객체가 동일한지 판단하기 위해 객체를 문자열로 변환 후 비교할 수 있습니다.

 

객체를 문자열로 변환하기 위해 JSON.stringify() 함수를 사용합니다.

 

다음은 객체를 문자열로 변환 후 비교하는 코드입니다.

const obj1 = {Age: 30};
const obj2 = {Age: 30};

const strObj1 = JSON.stringify(obj1);
const strObj2 = JSON.stringify(obj2);

console.log("strObj1 : " + strObj1); // strObj1 : {"Age":30}
console.log("strObj2 : " + strObj2); // strObj2 : {"Age":30}

console.log(obj1 === obj2); // false
console.log(strObj1 === strObj2); // true

 

객체 배열에서 중복 값이 있는지 확인하기 위해 JSON.stringify과 Set 컬렉션을 같이 사용합니다.

 

배열의 각 요소들을 문자열로 변환하기 위해 배열의 map() 함수를 활용합니다.

 

map() 함수에 JSON.stringify를 전달하여 배열의 각 요소가 문자열로 변환된 새로운 배열을 생성합니다.

const arr = [{Age: 30}, {Age: 30}];
const jsonArr = arr.map(JSON.stringify);

console.log(jsonArr);
// ['{"Age":30}', '{"Age":30}']

 

새로 생성된 배열을 Set에 전달하여 중복을 감지합니다.

const arr = [{Age: 30}, {Age: 30}];

const setCollection = new Set(arr.map(JSON.stringify));

const isDuplicate = setCollection.size < arr.length;

console.log(isDuplicate);
// true

 

반응형

댓글