당근먹는하니 2022. 5. 26. 18:03
728x90
반응형

  Set - 중복 제거하기

 배열을 대체해서 사용할 수 있다.

 타입은 객체 형태를 가진다. (typeof 해보면 'object')( Array.isArray() 하면 false )

 고유한 데이터만 저장할 수 있다. - 중복되는 데이터가 없다. 

let array = [ 1, 3, 1, 2, 4]
Array.from(new Set(array)); // [1, 3, 2, 4]
arr1 = new Set();
arr2 = [];

// 데이터 추가
arr1.add(1)
arr2.push(1)

arr1.add(1) // 들어가지 않음(중복)

// 데이터 조회
arr1.has(1) // 1이 있나? true/false 반환
arr2.includes(1)

// 길이 
arr1.size 
arr2.length

// 데이터 삭제
arr1.delete()
arr2.pop()

// 초기화
arr1.clear()

// 반복문
arr1.forEach(el => {console.log(el)})

arr1.reduce // 불가능. 배열메서드 사용 불가
// set => 배열 변환 !중요!
// 1. Array.from
Array.from(arr1)

// 2. 스프레드 연산자
[...arr1]


[...arr1].reduce((acc, cur)=> { }) // 변환했으면 reduce도 사용가능

 

 

 

//짱 복잡하게 풀었다... 
function solution(numbers) {
    var arr = [];
  let answer = [];
  //   answer = numbers.filter(number => false === answer.includes(number))
  // console.log(numbers.filter(number => answer.includes(number)))
  //   return answer;
  for(let i = 0; i < numbers.length; i++){
    for(let j = 0; j < numbers.length; j++){
      if(i !==j) {
 			  arr.push(numbers[i]+numbers[j])          
      }
    }
  }
  console.log(arr)
  answer = Array.from(new Set(arr))
  return answer.sort((a,b)=> a-b)
    
}

위에서 j = i + 1 하면 if(i !== j) 안줘도 된다. 

 

// 멘토님 코드

function solution(numbers) {
	const answer = new Set();
    numbers.forEach( (num1, i) => {    
        numbers.slice(i+1).forEach(num2 => {
        const sum = num1 + num2; 
        
        answer.add(sum);
        }
    })
    
    return [...answer].sort((a,b)=> a-b);
 }
728x90
반응형