함수 합성
: 2개 이상의 함수 합쳐 사용하는 것
const plus=(a,b)=>a+b;
const minus=(a,b)=>a-b;
const multiple=(a,b)=>a*b;
const add10=x=>x+10;
console.log(multiple(add10(80),3)); //270
console.log(minus(plus(10,20),15)); //15
커링 (currying)
: 하나 이상의 매개변수(파라미터)를 갖는 함수를 부분적으로 나누어 각각 단일 매개변수를 갖는 함수로 설정
파라미터 개수보다 적은 값이 들어오면 함수 자체를 반환,
파라미터에 맞게 들어오면 최종값 반환
https://sujinlee.me/currying-in-functional-javascript/
[번역] 초보자를 위한 함수형 자바스크립트 Currying 가이드
원문 : A Beginner’s Guide to Currying in Functional JavaScript - M. David Green 커링 currying, 또는 partial application은 기존 자바스크립트 코딩에 익숙한 사람들에게 혼란을 주는 기술 중 하나이다. 하지만 커링을
sujinlee.me
여러 개의 인자를 가진 함수를 호출할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받는 기법
함수 하나가 n개의 인자를 받는 과정을 n개의 함수로 각각의 인자를 받도록 하는 것
부분적으로 적용된 함수를 체인으로 계속 생성해 결과적으로 값을 처리
//const add10=add(10); //함수->변수에 넘김
//console.log(add10(20)); //30
const add=x=>y=>x+y;
console.log(add(10)(20)) //30
- 커피머신 예제
const coffeeMachine=liquid=>espresso=>`${espresso}+${liquid}`;
const americanoM=coffeeMachine('water');
const latteM=coffeeMachine('milk');
//console.log(americanoM);
//liquid 파라미터만 충족하므로 expresso=>`${espresso}+${liquid} 함수 리턴됨
const americano=americanoM('coffee bean');
const latte=latteM('coffee bean');
console.log(americano); //coffee bean+water
console.log(latte); //coffee bean+milk
https://dudmy.net/javascript/2015/11/16/javascript-sort/
https://bongra.tistory.com/279
sort 정렬
- 문자 정렬
fruit.sort();
- 숫자 정렬
//문자 정렬 방식대로 숫자를 정렬하면 ASCII 문자로 인식돼 10,11,2,3 순서로 출력된다
//숫자 정렬은 하단 방식으로 수행할 것
score.sort(function(a, b) { // 오름차순
return a - b;
});
const numbers=[12,45,7,36,14,9,15];
const isFirst=(first,second)=>{ //오름차순
if(first>second) return 1;
return -1;
}
filter
: 조건에 맞는 요소로 이뤄진 배열 리턴
const ages=[11,22,34,56,23,40];
const upper20=ages.filter(age=>age>20);
const under18=ages.filter(age=>age<18);
const between20And29=ages.filter(age=>age>19&&age<30);
console.log(upper20); //[ 22, 34, 56, 23, 40 ]
console.log(under18); //[ 11 ]
console.log(between20And29); //[ 22, 23 ]
const studentList=[
{name:'김철수',kor:80,eng:70,mat:87},
{name:'이영희',kor:100,eng:98,mat:90},
{name:'홍길동',kor:90,eng:56,mat:70},
{name:'박찬호',kor:70,eng:47,mat:37},
{name:'손흥민',kor:50,eng:77,mat:97}
];
const upper80=studentList.filter(student=>student.kor>=80); //student:매개변수, 배열 각 요소들
console.log(upper80)
//[
// { name: '김철수', kor: 80, eng: 70, mat: 87 },
// { name: '이영희', kor: 100, eng: 98, mat: 90 },
// { name: '홍길동', kor: 90, eng: 56, mat: 70 }
//]
map
: 배열 내의 모든 요소 각각에 대해 함수 실행, 새로운 배열을 반환
배열 내 요소들을 1대1로 짝짓되 기존 객체를 수정하지 않는 메서드
let list=[1,2,3];
let multiList=list.map(item=>item*10);
multiList.forEach(item=>console.log(item)); //10,20,30
- 문제 : 연봉 10% 인상된 새로운 배열
const listEmployee=[
{name:'홍길동',age:50,salary:5200},
{name:'이영희',age:40,salary:6000},
{name:'김철수',age:30,salary:4500}
];
//연봉이 10% 인상된 결과
//이름 나이 인상된연봉
//const result=listEmployee.map(employee=>Math.floor(employee.salary*1.1));
const newSalary=listEmployee.map(employee=>employee.salary*1.1);
for (let i=0;i<listEmployee.length;i++){
console.log(`이름: ${listEmployee[i].name}
나이: ${listEmployee[i].age} 연봉: ${parseInt(newSalary[i])}`);
}
//
이름: 홍길동 나이: 50 연봉: 5720
이름: 이영희 나이: 40 연봉: 6600
이름: 김철수 나이: 30 연봉: 4950
https://ko.javascript.info/array-methods#ref-890
https://bigtop.tistory.com/69
reduce
: 누계를 통해 하나의 결과를 리턴하는 함수
.reduce((누적값, 현재 요소 값, 현재 요소 인덱스, 현재 배열)=>{return 다음 누적값},초기 누적값)
const scores=[96,78,60,77,85];
const sum=scores.reduce((a,b)=>a+b); //a:누적값 b:요소값
console.log(sum); //396
const sum2=scores.reduce((a,b)=>a+b,10);
console.log(sum2); //400
- 문제: 점수 총합
const students=[
{name:'김철수',score:80},
{name:'이영희',score:90},
{name:'홍길동',score:60},
{name:'박찬호',score:89},
{name:'손흥민',score:46}
]
const result=students.map(s=>s.score);
const result2=result.reduce((a,b)=>a+b,0);
console.log(result2); //365
- 문제 : 국어, 영어 평균이 80점 이상인 학생의 수학 점수의 합 출력
const studentList=[
{name:'김철수',kor:80,eng:70,mat:87},
{name:'이영희',kor:100,eng:98,mat:90},
{name:'홍길동',kor:90,eng:56,mat:70},
{name:'박찬호',kor:70,eng:97,mat:37},
{name:'손흥민',kor:90,eng:77,mat:97}
];
const matTotal = studentList
.filter(score=>(score.kor+score.eng)/2 >= 80) //필터=>국 영 평균 80 이상인 배열요소들 추출
.map(student=>student.mat) //맵=> 필터된 학생들의 수학 점수만 추출
.reduce((a,b)=>a+b); //리듀스=> 수학점수 누계
console.log(matTotal); //224
파일
- 파일 저장
const fs=require('fs');
const contents='안녕하세요\n파일 저장하기';
fs.writeFile('./msg.txt',contents, function(err){ //콜백 함수 필수
if (err){
console.log(err);
}else{
console.log('저장 완료')
}
});
- 파일 읽기(불러오기)
- 동기
const fs=require('fs');
const data=fs.readFileSync('./msg.txt');
const str=data.toString();
console.log(str);
- 비동기
const fs=require('fs');
fs.readFile('./msg.txt',(err,data)=>{
if (err){
console.log('오류 발생');
}else{
console.log(data.toString());
}
});
const fs=require('fs');
const openPrint=path=>fileName=>fs.readFile(path+fileName,(err,data)=>{
if(err){
console.log('오류 발생');
}else{
console.log(data.toString()); //문자로 출력
}
});
const thisDir=openPrint('./currying/'); //openPrint의 fileName=>fs.. 이하 함수 반환됨
const otherDir=openPrint('./');
thisDir('curring1.js');
otherDir('list.json');
- 파일 내용 수정
const fs=require('fs');
fs.readFile('./msg.txt',(err,data)=>{ //파일 읽어와서
if (err){
console.log('오류 발생');
}else{
let contents=data.toString();
contents='내용 수정';
fs.writeFile('./msg.txt',contents,function(err){ //새로 쓰기
if (err){
console.log('저장 불가')
}else{
console.log('저장 완료');
}
});
}
});
- 파일 내용 추가
const fs = require('fs');
fs.appendFile('./msg.txt','리액트와 노드js 평가',err=>{
if(err){
console.log('오류 발생')
}else{
console.log('파일 내용 추가')
}
});
'Programming > 국비학원' 카테고리의 다른 글
220819 - 반응형 웹 제작 (0) | 2022.08.20 |
---|---|
220818 - 웹페이지 알파, 베타 테스트 / 반응형 웹, 적응형 웹 (0) | 2022.08.19 |
220811 - 자바스크립트 - 함수, 배열, 클로저 (0) | 2022.08.12 |
220810 - 자바스크립트 - 문법 (0) | 2022.08.11 |
220809 - 자바스크립트 - 기초 문법, JSON 표기법 (0) | 2022.08.10 |