KIC/TYPESCRIPT

[TypeScript] 기본2 arrow, indexOf, reduce, rest, des

octopengj 2020. 11. 2. 10:11
/*
arrow.ts

화살표 함수 => 자바의 람다함수(->) 기능상 똑같다.
형식) var or let or const 변수명=function(매개변수명:자료형){처리구문}
*/

let po = function(x:number) {
    console.log("x=>"+x);
    return x * x;
}
console.log(po(10)); 

/*
형식2) const 변수명=(매개변수1, 매개변수2,...)=>{처리 구문}
매개변수 한개면 () 생략 가능, 함수의 내용이 한문장이상 { } 처리
매개변수의 자료형을 쓰지 않으면 any(어떠한 자료형도 ok) -> 권장하지 않는다.  반드시 자료형을 쓰는 것이 좋다.
*/

const po2 = x => x * x;
console.log(po2(20));

//tsc arrow.ts
//node arrow.js
/*
자바스크립트에서 가장 많이 사용하는 함수(배열과 연관) 

1. indexOf 함수(검색할 때 사용)
*/

var str:string[]=["테스트","연습","리액트"];
var isExist=false; //찾았는지 유무

for(var i=0; i<str.length; i++){
    if(str[i]==="연습"){
        isExist=true;
        console.log('데이터 찾음=>',str[i]);
    }else{
        console.log('데이터 못찾음=>',str[i]);
    }
}

// 배열.indexOf("찾고자하는 값")!== -1(못찾으면 -1을 리턴)

var isExist2=(str.indexOf("연습")!==-1)
console.log('isExist2=>',isExist2);

// 2.filter()=>JSON객체중에서 특정한 값만 추출 => 반환
var arr=[
    {"name":"apple","count":2},
    {"name":"orange","count":5},
    {"name":"banana","count":3},
    {"name":"melon","count":10}
];
var newArr=arr.filter(function(item){ 
    //반환시켜줄 수 있는 익명함수를 콜백하여 newArr에 넣어준다. 
    return item.name==='orange' //return item.count===2 
    //return 매개변수(객체).특정한키명 === '찾을 값'
})
console.log('Filter result=>',newArr);

//tsc arrow2.ts
//node arrow2.js

 

/*
 3. map함수 => 기존의 배열의 요소들을 하나씩 읽어들여서 계산 후 
            길이가 같은 새로운 배열을 하나 만들때 사용하는 함수
 */

 var arr2=[1,2,3] //var arr2:number[]={1,2,3,}
 var po3=arr2.map(function(x){
     return x+x;
 })
 console.log(po3); //[2,4,6]

 const arr3=[6,7,8]
 const po4=arr3.map(x=>x+x)
 console.log('po4->',po4);//[12,14,16]

 const a=[3,4,5,6,7]
//  const c=a.map(function(v,i){ // v 배열의 항목, i 인덱스번호
//     console.log(v)
//     return v+1;
//  })
 const c=a.map((v,i)=>{
     console.log(v)
     return v+1;
 })

 // 4.reduce()함수 => 콜백함수이용 => 새로운 배열을 리턴 (앞의 매개변수, 뒤의 매개변수)

 function addRounded(pre,current){
     return pre+current;
 }

 var numbers=[1,2,3,4]
 //const or let 변수(새로운 배열)=기존의 배열명.reduce(함수명) or (함수명,매개변수)
 var result=numbers.reduce(addRounded,1) //1은 첫번째 매개변수가 된다.
 console.log('result=>',result) //11

 // 5.forEach => for문 
 const array=[1,2,3]
 array.forEach(function(v,i){
     if(v===3){
         console.log(v+":"+i)
     }
 })
 //tsc arrow3.ts
 //node arrow3.js
 
 
 //터미널 결과
 /*
 Windows PowerShell
PS C:\Users\user\Desktop\vsc\src> tsc arrow3.ts
PS C:\Users\user\Desktop\vsc\src> node arrow3.js
[ 2, 4, 6 ]
po4-> [ 12, 14, 16 ]
3
4
5
6
7
result=> 11
3:2
PS C:\Users\user\Desktop\vsc\src> 
 */
/*
화살표함수를 작성하면 안되는 경우
 => 객체를 생성하고 메서드를 내부에서 작성하는 경우
*/

const obj3={
    name:'Lee',
    //sayHello():()=>console.log(`Hi ${this.name}`)  --> name에 빨간줄이 생긴다.
    sayHello(){ //function 생략
        console.log(`Hi ${this.name}`)
    }
}
obj3.name='Kim' //객체명.키명=새로운 값
obj3.sayHello()

 

/*
 5. rest함수 
 함수를 작성하고 매개변수를 전달할 때 -> 만약에 전달하지 못하면 에러유발
 만약에 매개변수를 전달 받지 못할경우에는 내부적으로 디폴트 매개변수값을 지정할 수가 있다. 
 => rest 매개변수 (정상적으로 매개변수값이 전달되면 적용X)
 */

 function plus(x=8,y=9){
     return x+y;
 }
 console.log('plus()=>',plus())
 console.log('plus(1,2)=',plus(1,2))
//1. spread 연산자->react에서 많이 사용하는 연산자(...배열명)=>동적배열
function ktest(...abc){
    console.log(Array.isArray(abc))
    //Array.isArrya(배열명)->배열이명 true 아니면 false
    console.log('abc->',abc)
}
ktest(1,2,3,4,5,6,7)

//2. 주의할점(매개변수를 전달받을 때 순서가 정해져 있다.)
//spread 연산자는 맨 마지막에 위치
function ktest2(param,param2, ...abc){
    console.log('param->',param)
    console.log('param2->',param2)
    console.log('abc->',abc)
}
ktest2(7,8,9,10,11,12)//param=7, abc=8,9,10,11,12
ktest2(13,14,15)//param=13, param2=14, abc=15
console.log('============================================')
// function ktest4(...abc,param1,param2,param3){ //에러발생 

// }

//tsc rest.ts
//node rest.js


// 터미널화면
rest.ts:31:17 - error TS1014: A rest parameter must be last in a parameter list.

31 function ktest4(...abc,param1,param2,param3){ //에러발생
                   ~~~
Found 1 error.

PS C:\Users\user\Desktop\vsc\src> tsc rest.ts
PS C:\Users\user\Desktop\vsc\src> node rest.js
plus()=> 17
plus(1,2)= 3
true
abc-> [
  1, 2, 3, 4,
  5, 6, 7
]
param-> 7
param2-> 8
abc-> [ 9, 10, 11, 12 ]
param-> 13
param2-> 14
abc-> [ 15 ]
============================================

(function ktest4(...abc,param1,param2,param3) spread연산자가 맨 앞에 있을 경우 에러

 

 

/*
 6. des
 배열 디스트럭처링 -> 배열의 각각의 요소를 분리 -> 각각의 다른 변수에 저장시키는 방법
 */

 let karr=['a','b','c']
 let one=karr[0] //let one='a';
 console.log(one,karr[1],karr[2])

 const karr2=['d','e','f']
 /*
 let one1=karr2[0]
 let two2=karr2[1]
 let three3=karr2[2]
*/
 //형식) const [변수1,변수2,변수3]=배열명
 const [one1,two2,three3]=karr2
 console.log(one1,two2,three3)

 let a2,b2,c2 //변수를 ,로 구분해서 나열
 [a2,b2,c2]=[4,5,6]
 console.log(`a2값 ${a2} b2값 ${b2} c2값 ${c2}`)

 // tsc des.ts
 // node des.js

 

/*
des2.ts 
배열+함수, 객체에서도 사용이 가능
형식) const {키명:값, 키명2:값2,...}={키명:저장할값,키명2:저장할값2,...}
*/

const {prop1:p1,prop2:p2}={prop1:'a',prop2:'b'} //p1='a' p2='b'
console.log({prop1:p1,prop2:p2}) //a,b

// 객체 => default value값 설정이 가능
const {prop1,prop2,prop3='cc'}={prop1:'aa',prop2:'bb'}

// 함수를 이용해서 값을 저장시킬 수 있다.
function margin(){
    const left=1, right=2, top=3, bottom=4
    return {left,right,top,bottom} //객체로 만들어서 반환
}
const {left,bottom}=margin()
console.log(left,bottom) //1,4

// tsc des2.ts
// node des2.js

 

'KIC > TYPESCRIPT' 카테고리의 다른 글

[TypeScript] 기본4 export, import  (0) 2020.11.02
[TypeScript] 기본3 class, func(?)  (0) 2020.11.02
[TypeScript] 설치 및 기본 let, const, template  (0) 2020.10.30