javascript es6 비구조할당과 함수
2022. 10. 26. 13:07ㆍJavascript es6
-배열 또는 객체에서 변수를 추출해내는 표현식
-함수의 전달 인자가 객체 또는 배열일 경우 인수를 바로 원소와 속성으로 지정할 수 있어 편리하다
배열 디스트럭쳐링
let arr = [10,20,30];
let a = arr[0];
let b = arr[1];
let c = arr[2];
console.log(a,b,c); // 10 20 30
let [a2 ,b2, c2] = [10,20,30];
console.log(a2,b2,c2); // 10 20 30
let [a3 ,b3, c3] = arr;
console.log(a3,b3,c3); // 10 20 30
//일부 배열 원소는 생략할 수 있다
let [a4 , , c4] = arr;
console.log(a4,c4); // 10 30
let [a5=10 , b5=20, c5=30] = [ , , 100];
console.log(a5,b5,c5); // 10 20 100
let [a6, b6, c6] = [10,20,30,40,50,60];
console.log(a6,b6,c6); // 10 20 30
let [a7, b7, ...c7] = [10,20,30,40,50,60];
console.log(a7,b7,c7); //c7은 배열[30,40,50,60]
let a8 = [];
a8 = [100,200,300];
console.log(a8);
let a9 = [];
let a10 = ['홍길동','이순신','최순실'];
a9 = a10;
console.log(a9);
객체 디스트럭쳐링
let obj = {a:10, b:20, c:30};
let a = obj.a;
let b = obj.b;
let c = obj.c;
console.log(a,b,c); //10 20 30
let {a2,b2,c2} = {a2:10,b2:20,c2:30};
console.log(a2,b2,c2); //10 20 30
//**************************************************************************************************************************************************************************************//
//객체 디스트럭쳐링 변수와 같은 이름의 객체 속성이어야 한다(이름이 다르면 undefined 가 할당된다)//
//**************************************************************************************************************************************************************************************//
let obj3 = {a3:10,b3:20,c3:30};
let {a3,b3,c3} = obj3;
console.log(a3,b3,c3); //10 0 30
let obj4 = {a4:10, b4:20};
let{a4,b4,c4} = obj4;
console.log(a4,b4,c4); // 10 20 undefined
let obj5 = {};
let obj6 = {name:'최순실', age:60, weight:'100kg', height:'130cm'};
obj5 = obj6;
console.log(obj5);
함수 매개변수 전달
//함수 매개변수 배열 전달인자
function arr_func([a,b,c=a+b]){
console.log(a,b,c); // 100 200 300
}
arr_func([100,200]);
// let arr=[100,200];
// function arr_func([a,b,c=a+b]){
// console.log(a,b,c); // 100 200 300
// }
// arr_func(arr);
//함수 매개변수 객체 전달인자
function obj_func({a,b,c=a+b}){
console.log(a,b,c); // 100 200 300
}
obj_func({a:100,b:200});
// let obj = {a:100,b:200};
// function obj_func({a,b,c=a+b}){
// console.log(a,b,c); // 100 200 300
// }
// obj_func(obj);
let arr = ['이순신','최순실','콘도르'];
function arr_func(a){
console.log(a[0],a[1],a[2]); // 이순신 최순실 콘도르
}
arr_func(arr);
// let obj = {name:'최순실', age:100};
// function obj_func(a){
// console.log(a.name,a.age);
// }
// obj_func(obj)
함수
나머지 매개변수(Rest Parameter) - 코드의 가독성을 높일 수 있다
function myfnc(p1){
if(arguments[1]){ // 두번째 전달인자가 있을 때
console.log(p1+arguments[1]); // 300
}else{
console.log(p1);
}
}
myfnc(100,200);
//나머지 매개변수 사용
function myfnc2(p1,...args){ // ...args 나머지 매개변수 추가(배열처리)
if(args[0]){ // 두번째 전달인자가 있을 때
console.log(p1+args[0]); //300
}else{
console.log(p1)
}
}
myfnc2(100,200);
function myfnc3(p1,...args){ // ...args 나머지 매개변수 추가(배열로 처리)
if(args[0]){
console.log(p1+args[0]+args[1]+args[2]); // 1000
}else{
console.log(p1)
}
}
myfnc3(100,200,300,400);
기본 매개변수(default Parameter)
-이전에는 매개변수에 기본값을 설정할 수 없어 전달 인자가 없는 경우 매개변수에는
undefined가 할당된다(초기값을 다시 설정해야하는 번거러움이 있다)
function myFnc(p1){
p1 = (typeof p1 != 'undefined')? p1:0; // 전달인자 없을시 0
console.log(p1);
}
myFnc();
//기본 ㄴ매개변수 사용
function myfnc2(p1=0){
console.log(p1);
}
myfnc2();
//먼저 선언된 매개변수의 값은 나중의 기본 매개변수에 이용 가능
function myFnc3(a,b=100,c=a+b){
console.log(a,b,c)// 100 100 100
}
myFnc3(100);
function myFnc4(a=100,b=200,c=a+b){
console.log(a,b,c); // 100 200 300
}
myFnc4();
function myFnc5(a=100,b=200,c=a+b){
console.log(a,b,c); //10 20 30
}
myFnc5(10,20);
// 두번째 세번째 매개변수의 초기값이 없을 때
function myFnc6(a=100,b,c){
console.log(a,b,c)// 100 200 300
}
myFnc6(100,200,300); // 최소 3개부터 가능
// 두번째 매개변수의 초기값이 없을 때
function myFnc7(a=100,b,c=300){
console.log(a,b,c)// 100 200 300
}
myFnc7(100,200) // 최소 2개부터 가능
myFnc7(100,200,300);
return 값이 있는 함수
function message(){
return '자바스크립트 ES6를 공부합시다';
}
function sendMessage(msg=message()){
console.log(msg);
}
sendMessage();
sendMessage(100); // 매개변수 값을 준다면 해당 값이 출력
화살표 함수
function func1(a){
console.log(a+'를 공부합시다!');
}
func1('자바스크립트');
let func2 = function(a){
console.log(a+'를 공부합시다!');
}
func2('자바스크립트');
//화살표 함수
let func3 = (a)=>{
console.log(a+'를 공부합시다');
}
func3('자바스크립트');
let func4 = (a,b)=>{
console.log(`${a}이 ${b}를 공부합니다`);
}
func4('최순실','사기');
let func44 = (a,b)=>{
return `${a}이 ${b}를 공부합니다`;
}
console.log(func44('최순실','사기사기사기사기'));
//블럭 생략 가능
let func5 = (a,b) => console.log(`${a}가 ${b}를 공부합니다`);
func5('김아무개','자바스크립트');
//주의 : 블록 생략시 return은 사용 불가(error)
// let fun6 = (a,b) => return `${a}이 ${b}를 공부합니다`;
// func6('김개똥','자바스크립트')
//매개변수가 없을 때
let func6 = ()=> console.log('자바스크립트를 공부합시다');
func6();
배열 함수
1) forEach : 반환값이 없다, 단순 for문과 같이 작동한다.
2) map : 반환값을 배열에 담아 반환한다.
3) filter: 조건에 충족하는(true) 아이템만 배열에 담아 반환한다.
4) some: 조건에 충족하는 아이템이 하나라도 있으면 true 반환, 아니면 flase.
5) every: 모든 배열에 아이템이 조건을 충족하면 true 반환, 아니면 false.
6) find : 조건에 충족하는 아이템 하나만 반환(여러개라면 첫번째것만 반환)
7) findIndex : 조건에 충족하는 아이템의 인덱스값 반환 (여러개라면 첫번째아이템의 인덱스번호만 반환)
* 형식
let 배열명 = 배열명 / 객체배열명 . 배열함수(function(item,index){처리 코드});
let names = [
"Steven Paul Jobs",
"Bill Gates",
"Mark Elliot Zuckerberg",
"Elon Musk",
"Jeff Bezos",
"Warren Edward Buffett",
"Larry Page",
"Larry Ellison",
"Tim Cook",
"Lloyd Blankfein",
];
let ceoList = [
{name:'홍길동', age:50, height: 180},
{name:'이순신', age:60, height: 190},
{name:'강감찬', age:70, height: 170}
];
function printName(item){
console.log(item);
}
names.forEach(printName);
// foreach
names.forEach((item)=>console.log(item));
names.forEach((item,index)=>{console.log(item,index);});
// map
let data = names.map((item)=>{
return item;
// return '이름:' + item;
});
console.log(data);
let data2 = ceoList.map((item)=>{
return item.name;
});
console.log(data2);
//filter
let data3 = ceoList.filter((item)=>{
//return item.name =='이순신';
return item.age>=60
});
console.log(data3)
let data4 = names.filter((item)=>{
return item.startsWith('L') // 첫번째 문자 찾는 메소드
});
console.log(data4);
//some
let data5 = names.some((item)=>{
return item.startsWith('L'); // 해당 문자열로 시작하는 배열이 있다면 true 없다면 false
// return item.startsWith('K');
});
console.log(data5);
//every
let data6 = names.every((item)=>{
return item.startsWith('L'); // 해당 문자열로 모든 배열이 시작한다면 true 아니면 false
// return item.length>1; // names 배열 한에 문자열의 길이가 1보다 길면 true 아니면
});
console.log(data6);
let data7 = ceoList.every((item)=>{
//return item.name == '이순신';
return item.age >= 50;
});
console.log(data7);
//find
let data8 = names.find((item)=>{
return item.startsWith('L'); // names 배열의 L로 시작하는 첫번째 문자열 반환
});
console.log(data8);
//findIndex
let data9 = names.findIndex((item)=>{
return item.startsWith('L'); // names 배열의 L로 시작하는 첫번째 문자열의 인덱스 번호 반환
});
console.log(data9)
함수 예시
//<map 문제>
//모든 이름을 대문자로 바꾸어서 출력하시오.
let upperCaseName = names.map((item)=>item.toUpperCase());
console.log(upperCaseName);
//성을제외한 이름만 출력하시오. (예-[“Steven”,“Bill”,“Mark”,“Elon”…])
let firstNames = names.map((item)=>item.split(' ')[0]);
console.log(firstNames);
//이름의 이니셜만 출력하시오. (예-[“SPJ”,“BG”,“MEZ”,“EM”…])
let initialOnly = names.map((item) => {
let splitName = item.split(" "); // splitName[0] = [Steven], splitName[1] = [Paul], splitName[2] = [Jobs]
let initial = "";
splitName.forEach((nameItem) => (initial += nameItem[0]));
return initial;
});
console.log(initialOnly);
//<filter 문제>
//이름에 a를 포함한 사람들을 출력하시오.
let includeA = names.filter((item)=>item.includes('a'));
console.log(includeA);
//<some 문제>
//전체 이름의 길이가 20자 이상인 사람이 있는가?
console.log(names.some((item)=>item.length>=20));
//<every 문제>
//모두의 전체 이름의 길이가 20자 이상인가?
console.log(names.every((item)=>item.length>=20));
//모두의 이름에 a 가 포함되어 있는가?
console.log(names.every((item)=>item.includes('a')));
//<find 문제>
//전체 이름의 길이가 20자 이상인 사람을 찾으시오.
console.log(names.find(item=>item.length>=20));
//미들네임이 포함되어있는 사람을 찾으시오.(예-Steven Paul Jobs)
console.log(names.find(item=>item.split(' ').length>=3));
//<findIndex 문제>
//전체 이름의 길이가 20자 이상인 사람의 인덱스 번호를 찾으시오.
console.log(names.findIndex(item=>item.length>=20));
//미들네임이 포함되어있는 사람의 인덱스 번호를 찾으시오.
console.log(names.findIndex(item=>item.split(' ').length>=3));'Javascript es6' 카테고리의 다른 글
| Javascript ES6 class 와 모듈 (0) | 2022.10.27 |
|---|---|
| JS es6 (0) | 2022.10.25 |