ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL-2024.02.25 - JS - MAP과 예제
    > 기초/Javascript 2024. 2. 25. 22:55

    ------- map

    객체와의 차이:

    - Map 객체는 키와 값의 쌍으로 이뤄진 컬렉션.

    구분 객체 Map 객체
    키로 사용할 수 있는 값 문자열 | 심벌 값 객체를 포함한 모든 값
    이터러블 X O
    요소 갯수 확인 Object.keys(obj).length map.size

     

     

     

    생성:

    // 기본 생성
    const map1 = new Map(['key1','value1'], ['key2','value2'])
    console.log(map1) // Map(2) {'key1' => value1','key2' => value2'}
    
    
    // 중복된 키 > 덮어써짐
    const map1 = new Map(['key1','value1'], ['key1','value2'])
    console.log(map1) // Map(1) {'key1' => 'value2'}
    
    // 요소 갯수 확인
    const {size} = new Map(['key1','value1'], ['key2','value2']);
    console.log(size) // 2
    const map = new Map(['key1','value1'], ['key2','value2'])
    console.log(map.size) // 2
    
    // 요소 추가 (메소드 체이닝 가능)
    const map = new Map();
    map.set('key1','value1')
    console.log(map) // Map(1) {'key1' => 'value1'}
    
    // 요수 추가 2 (모든 값을 키로 설정 가능)
    const map = new Map(); 
    const lee = { name: 'Lee' } 
    const kim = { name: 'Kim' } 
    
    map
       .set(lee, 'developer')
       .set(kim, 'designer')
        
    console.log(map)// Map(2) { {name: "Lee"} => "developer" , {name: "Kim"} => "desginer" }
    
    // 요소 취득
    const map = new Map();
    
    const lee = { name: 'Lee' } 
    const kim = { name: 'Kim' } 
    
    map
    	.set(lee, 'developer')
        .set(kim, 'designer')
     
     console.log(map.get(lee)); // developer
     console.log(map.get('key')); //developer
     
     
     // 요소 확인
    console.log(map.has(lee)); // true
    
    // 요소 삭제
    map.delete(kim);
    console.log(map) // Map(1) { {name: "Lee"} => "developer"}
    
    map.delete("kk"); // 없는 키로 삭제할때, 에러없이 무시
    console.log(map) // Map(1) { {name: "Lee"} => "developer"}
    
    map.delete(kim).delete(lee); // set 메서드와 달리 메소드 체안 불가
    
    // 일괄 삭제
    map.clear()
    console.log(map) // Map(0){}
    
    
    // 요소 순회 (v-순회중인 요소 & k-순회중인 요소키 & map- 현재 순회중인 Map 객체 자체)
    map.forEach((v , k , map)=> console.log(v,k,map))
    
    <!-
    - v: developer(순회중인 Value)
    - k: {name: "Lee"} (순회중인 Key) 
    - map: Map(2) { {name: "Lee"} => "developer"}, {name: "Kim"} => "designer"}} (현재 순회중인 Map 객체 자체)
    -->
    
    for(let entry of map){
    	console.log(entry) // [{ {name: "Lee"} => "developer" , {name: "Kim"} => "desginer" }]
    }
    
    //// .keys() : Map 객체에서 요소키를 값으로 갖는 Iterator
    for(let key of map.keys()){
    	console.log(entry) // {name: "Lee"} , {name: "Kim"}
    }
    
    //// .values() : Map 객체에서 요소값을 값으로 갖는 Iterator
    for(let value of map.values()){
    	console.log(entry) // developer designer
    }
    
    //// .entries() : Map 객체에서 요소키와 요소값을 값으로 갖는 Iterator
    for(let entry of map.entries){
    	console.log(entry) // [{ {name: "Lee"}, "developer" , {name: "Kim"}, "desginer" }]
    }

     

     

     

    예제
    
    const solution = (ings, menu, sell) => {
        const ingsMap = new Map();
        const menuMap = new Map();
    
        ings.forEach(v => {
            const split = v.split(' ');
            ingsMap.set(split[0], split[1])
        })
    
        menu.forEach( v => {
            const split = v.split(' ');
            menuMap.set(split[0], split[2] - split[1].split('').reduce((p, n)=> {
                return Number(p)+ Number(ingsMap.get(n)?? 0)
            }, 0))
        })
    
        return sell.reduce((p, n) => {
            const split = n.split(' ')
            return p + (Number(menuMap.get(split[0])) * Number(split[1]))
        }, 0)
    }
    
    
    console.log("result:: ", solution([ "r 10", "a 23", "t 124", "k 9" ], [ "PIZZA arraak 145", "HAMBURGER tkar 100", "BREAD kkk 30", "ICECREAM rar 50", "SHAVEDICE rar 45", "JUICE rra 55", "WATER a 20" ], [ "BREAD 5", "ICECREAM 100", "PIZZA 7", "JUICE 10", "WATER 1" ]));

    댓글

Designed by Tistory.