JS - Set, Map

LEE JI YOUNG·2022년 4월 12일
0

JS/Node

목록 보기
18/23

ES6 Map(), Set()

Set

: Array 중복 제거 ( 3가지 방법 )

  • Set() 은 value 들로 이루어진 컬렉션(“집합”이라는 표현이 적절)
  • Array 와는 다르게 Set 은 같은 value 를 2번 포함할 수 없음
  • 따라서 Set 에 이미 존재하는 값을 추가하려고 하면 아무 일도 없음

new Set(배열)
let setA = new Set(); // 비어있는 새로운 set 을 만듬

const dupArr = [1, 2, 3, 1, 2]; 

const set = new Set(dupArr); // 중복요소 제거

const uniqueArr = [...set];

document.writeln(Array.isArray(uniqueArr)); // true
document.writeln(uniqueArr); // 1,2,3

Set 객체를 배열(Array)로 변환하는 3가지 방법

출처 : https://hianna.tistory.com/421

  • Array.from()
    Array.from 함수는 유사배열객체(array-like object)나 반복가능객체(iterable object)를 얕은 복사(shallow copy)하여
    새로운 배열(Array) 객체를 만들어줍니다.
    • 유사배열객체(array-like object) : length 속성과 index element를 가지는 객체
    • 반복가능객체(iterable object) : 배열을 일반화한 객체 ex)Map, Set
const set = new Set([1, 2, 3]);
const arr = Array.from(set); // 1,2,3
  • Spread Operator(전개 연산자)
    Spread Operator는 ES6의 문법으로 배열이나 문자열과 같이 반복가능한 객체를 하나씩 펼쳐서 리턴합니다.(전개)
const arr = [...set]
  • forEach
const set = new Set([1, 2, 3]);
const arr = [];

set.forEach((element) => {
  arr.push(element);
})

Map

  • Map() 은 자바스크립트의 key-value 페어(pair) 로 이루어진 컬렉션
  • key 를 사용해서 value 를 get, set 할 수 있음
  • key 들은 중복될 수 없음 : 하나의 key 에는 하나의 value 만
  • key 로 사용할 수 있는 데이터형 : string, symbol(ES6), object, function >> number 는 사용할 수 없음에 주의!

Map 과 Object 비교

  • Object 의 key 는 string 과 symbol(ES6) 만 가능하지만, map 은 어떤 값도 가능
  • Object 에서는 크기를 추적해서 알 수 있지만, map 은 손쉽게 얻을 수 있음(size)

new Set(배열)

// 새로운 map 을 만들고 map 에 key, value 엔트리를 추가
let me = new Map();
me.set('name', 'kevin');
me.set('age', 28);
console.log(me.get('age'); // 28
// 대괄호를 사용해서 map 을 선언하는 방법
const roomTypeMap = new Map(
  [
    ["01", "원룸(오픈형)"],
    ["02", "원룸(분리형)"],
    ["03", "원룸(복층형)"],
    ["04", "투룸"],
    ["05", "쓰리룸"]
  ]
);
// 새로운 map 을 만들고 그 데이터를 기존의 [key, value] 페어컬렉션으로 채움
let you = new Map().set('name', 'paul').set('age', 34);
console.log(you.get('name')); // 'paul'

// has(): 주어진 key 가 존재하는지 확인
console.log(me.has('name')); // true

// size: map 에 담겨진 엔트리의 개수를 조회
console.log(you.size); // 2

// delete(): 엔트리를 삭제
me.delete('age');
console.log(me.has('age')); // false

// clear(): 모든 엔트리를 삭제
you.clear();
console.log(you.size); // 0

프로그래머스 - 신고 결과 받기 Lv.1

function solution(id_list, report, k) {
    let reports = [...new Set(report)].map( a => {return a.split(' ')});
    let counts = new Map();
    for (const bad of reports){ 
        counts.set(bad[1],counts.get(bad[1])+1||1)
    }
    let good = new Map();
    for(const report of reports){
        if(counts.get(report[1])>=k){
            good.set(report[0],good.get(report[0])+1||1)
        }
    }
    let answer = id_list.map(a=>good.get(a)||0)
    return answer;
}
profile
프론트엔드 개발자

0개의 댓글