일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 예매로직
- sessionStorage
- Bootstrap
- 영화예매
- node.js
- spring
- Kubernetes
- AWS RDS
- chartjs
- topologySpreadConstraints
- mysql
- ajax
- zombie-hit apartment
- Java
- MySQL Error
- AWS Route53
- ssh
- ES6
- html
- spread operator
- javascript
- git
- jsp
- mongodb
- AWS
- post
- json
- Get
- 인생이재밌다
- terminationGracePeriodSeconds
- Today
- Total
jongviet
Aug 16, 2021 - Destructuring, set, weakset, map, weakmap, template 본문
Aug 16, 2021 - Destructuring, set, weakset, map, weakmap, template
jongviet 2021. 8. 16. 19:36*8월16일
*Destructuring
let data2 = ["ki", "gogo", "jk", "grit"];
let [jisu,,,jung] = data2; //콤마 기준으로 배열 순서 매핑
console.log(jisu, jung); //ki, grit
let obj2 = {
name : "ki",
address : "seoul",
age : 10
}
let {name, age} = obj2; //네이밍 기준으로 자동 매핑
console.log(name, age);
let {name:myName, age:myAge} = obj2; //새로운 이름으로 할당;
console.log(myName, myAge);
//JSON parsing
var news = [
{
"title" : "sbs",
"imgurl" : "http://blabla.com",
"newslist" : [
"백신부족",
"로또1등은?",
"S&P500 사상최고치"
]
},
{
"title" : "mbc",
"imgurl" : "http://blabla22.com",
"newslist" : [
"언제까지 버티나",
"올림픽중계사태",
"Dow 사상최고치"
]
}
];
//let [,mbc] = news;//들어가는 값을 기준으로, 0,1번 자리 값의 순서에 네이밍을하고 값을 받아옴
//console.log(mbc);
//let {title, imgurl} = mbc; //object 내의 key 값을 정확하게 연결해서 다시 빼옴; let[, mbc]와 연결
//console.log(title, imgurl);
let [, {title, imgurl}] = news; //내부 value까지 한번에 진행할 수도 있음;
//console.log(title, imgurl);
function getNewsList([, {newslist}]) { //파라미터에도 콤마로 구분해서 원하는 key값만 출력 가능
console.log(newslist);
}
getNewsList(news);
<div>hellohellohello there</div>
document.querySelector("div").addEventListener("click", function({target}) {
console.log(target.tagName);
console.log(target.innerText);
});
-Array 변형 -> Set, WeakSet
-Object 변헝 -> Map, WeakMap
*Set & WeakSet
//Set : 중복없이 유일한 값을 저장 -> 이미 존재하는지 체크할 때 유용함
let mySet = new Set();
//console.log(toString.call(mySet));
mySet.add("ki");
mySet.add("park");
mySet.add("ki");
//console.log(mySet.has("ki")); //보유 여부 확인
mySet.forEach(function(v) {
//console.log(v);
});
mySet.delete("park");
mySet.forEach(function(v) {
//console.log(v);
});
//WeakSet : Set과 타입은 비슷하지만 객체 형태만 저장 가능
//참조를 가지고 있는 객체만 저장이 가능함; 중간에 값이 null 처리되면 나오지 않음;
//객체 형태를 중복없이 저장하려고 할 때 유용함!!
let arr2 = [1,2,3,4];
let arr3 = [5,6,7,8];
let obj3 = {arr2, arr3};
let ws = new WeakSet();
ws.add(arr2);
ws.add(arr3);
ws.add(obj3);
//ws.add(111); //invalid, number&string은 들어갈 수 없음
//ws.add("111"); //invalid
//ws.add(function(){});
arr2 = null;
//console.log(ws);
*Map & WeakMap
-WeakMap의 key는 항상 object형태
//WeakMap 활용
const wm = new WeakMap();
function Area(height,width) {
// this.height = height;
// this.width = width;
wm.set(this, {height, width}); //private 처리
//console.log(this); //Area { }에 height와 width를 넣고 private 처리
}
Area.prototype.getArea = function() {
const {height, width} = wm.get(this);
return height * width;
}
let myarea = new Area(10, 20);
console.log(myarea.getArea());
console.log(myarea.height); //접근 불가
*destructuring & set을 활용한 중복없는 6자리 번호
const setting = {
name : "lotttooooo",
count : 6,
maxNumber : 45
}
let lottoSet = new Set();
let {maxNumber} = setting;
let {count} = setting;
function getRandomNumber (maxNumber, count) {
//랜덤한 유일한 값을 추출
while(count > 0) {
let num = Math.floor(Math.random() * 45 + 1);
if(num <= maxNumber) {
lottoSet.add(num);
count--;
}
}
return lottoSet;
}
let resultSet = new Set();
resultSet = getRandomNumber(maxNumber, count);
console.log(resultSet);
*DOM template
html
<div id="box"></div>
js
const data = [{
name: 'coffee-bean',
order: true,
items: ['americano', 'milk', 'green-tea']
},
{
name: 'startbucks',
order: false,
},
{
name: 'mega-coffee',
order: true,
items: ['latte', 'mojito']
}
]
//Tagged template literals
function fn(tags, name, items) {
//console.log(tags);
//console.log(name);
//console.log(items);
if (typeof items === "undefined") {
items = "<span style='color:red'>주문 가능한 상품이 없습니다.</span>"
}
return (tags[0] + name + tags[1] + items + tags[2]); //태그 배열 형태로 담고, name과 item값 각각
}
data.forEach(function (v) {
let template = fn `<h2>welcome ${v.name} !!</h2><h4>주문가능항목</h4><div>${v.items}</div>`;
document.querySelector("#box").innerHTML += template;
});
'javascript & typescript' 카테고리의 다른 글
Aug 26, 2021 - JS ES6 update2 .... (0) | 2021.08.26 |
---|---|
Aug 23, 2021 - JS ES6 update... (0) | 2021.08.23 |
Aug 19, 2021 - array.map, arrow function, array.filter (0) | 2021.08.19 |
Aug 15, 2021 - spread operator, from, includes, arguments (1) | 2021.08.15 |
Aug 13, 2021 - ES6(ES2015) 적응기 with 인프런 (1) | 2021.08.13 |