WebDevelop 수업 - Day15 JS : Lamda, Object

김지원·2022년 6월 29일
0

WebDevelop2

목록 보기
15/34

++ 저번시간 배열 메소드 추가
모든 script에 let arr = [1,2,3,4,5]; 배열이 있다는 가정하에 예시를 들겠음.

arr.indexOf(3);
: 주어진 값과 같은 아이템의 인덱스를 반환한다. 일치하는 아이템이 없다면 -1을 반환한다.

console.log(arr.indexOf(3));
console.log(arr.indexOf(6));

LAMDA

: 중괄호와 return을 생략한다.

  • 한줄로 적지 못하는 것은 람다로 표현하지 못한다.
    (== 중간에 내용이 더 있다면)
let sum = (a,b) => {
	return a+b
}

==

let sum = (a,b) => a+B

arr.every(f);
: 메서드가 호출되는 대상 배열의 아이템을 순차적으로 전달된 함수 f의 전달 인자로 활용하여 모든 아이템이 함수 f에 대해 참(True)을 반환하는가에 대한 여부를 반환.

  • 모든 case가 true일때 true를 반환.
    하나라도 false이면 반환 값은 false이다.

console.log( arr.every(x => x >0));

console.log( arr.every((x) => {
	return x > 0;
}) );

arr.filter(f);
: arr배열의 각 아이템을 매개변수로 받는 함수 f에 대해 참을 반환하는 아이템만 가지는 새로운 배열을 반환한다.

console.log( arr.filter(x => x > 3 ));

console.log( arr.filter(x => x < 0 )); // []


익명함수(Anonymous Function)

: 이름 없는 함수

x => x > 0

arr.forEach(f);
: arr 배열의 각 아이템을 f 함수에 대해 반복한다. 반환값 없음.

arr.forEach(x => console.log(x));

for(let i =0 i<arr.length; i++) {
	console.log(arr[i])
}
  • 같은 표현이다.

arr.map(f);
: 함수 f에 대해 arr 아이템을 전달하여 반환되는 새로운 값을 가지는 새로운 배열을 반환한다. 이 때 arr 과 새로 반환된 배열의 길이는 항상 같다.

console.log(arr.map(x => x * 2));


문제1) 자연수로 이루어진 배열 nums 중 짝수만을 새로운 배열로 만들어 반환하는 filterEvens함수를 만드세요. 단 이때 중괄호를 사용할 수 없습니다.

let nums = [107, 36, 1198, 19];
let filterEvens = nums => nums.filter(x => x % 2 == 0);
console.log(filterEvens(nums));


Object

: 키 - 값 쌍으로 이루어진 것

  • 자바에서 알고 있는 hashMap타입이랑 비슷하다.
    키와 값쌍으로 이루어져있고 키는 겹쳐질 수 없다.
  • 오브젝트 선언시 중괄호 사용. let students = {};
  • 키는 항상 문자열! 숫자불가, 쌍/홑따옴표 생략 가능
    'abc' = '1' == abc = '1'
  • 키와 값은 콜론으로 구분한다.
  • 대괄호 안에는 쌍따옴표 생략을 하면 안된다.
<script>
let students = {
     김학생 : 'Kim',
     이학생 : 'Lee',
     박학생 : 'Park'
};
console.log( students['김학생']);
console.log( students.이학생);
</script>

  • 김학생이라는 키에 맞는 값을 찾아서 돌려준다.

쌍 (Pair) 추가
students.최학생 = 'Choi';
== students['최학생'] = 'Choi';

쌍 수정
students['박학생'] = 'Bak';

쌍 삭제
delete students.최학생;

키 배열 가져오기

  • 겹칠 수 없는 값인 '키'만 배열로 가져온다.
    Object.keys(students);
Object.keys(students).forEach(key => {
	console.log(students[key]);
});

값 배열
Object.values(students);

  • 잘 쓰일일은 없다.

예제2 ) 매개변수로 주어진 문자열 code와 일치하는 국가의 이름(name)을 반환하는 함수 codeToName을 만드세요. 
단, 이때 정의되지 않는 코드가 입력될 경우, '존재하지 않는 코드'라는 문자열을 반환하세요.

가령, console.log(codeToName('ko'));는 '한국'을 반환합니다.
console.log(codeToName('xy')); // '존재하지 않는 코드'
단, countries 변수를 이용해야하며 이 변수의 쌍 (Pair)이 유동적으로 추가/삭제 되었을 때에도 
아래 두 함수는 유연하게 대응하여야 한다. 즉, switch 나 if 노가다 하지 말라는 뜻..
<script>
let countries = {
        au : {
            area : 7688000,
            name : '호주',
            population : 2569
        },
        de : {
            area : 357588,
            name : '독일',
            population : 8324
        },
        fr : {
            area : 543940,
            name : '프랑스',
            population : 6739
        },
        gb : {
            area : 243610,
            name : '영국',
            population : 6722
        },
        jp : {
            area : 377975,
            name : '일본',
            population : 12580
        },
        ko : {
            area : 100210,
            name : '한국',
            population : 5178
        },
        us : {
            area : 9834000,
            name : '미국',
            population : 32950
        },
};
</script>
<script>
 let codeToName = (code) => {
            let keys = Object.keys(countries);
            let name = '존재하지 않는 코드';
            if(keys.indexOf(code) > -1) {
                name = countries[code].name;
            }
            return name;
        };
</script>


예제3 ) 매개변수로 주어진 문자열 name과 일치하는 국가의 코드(code)를 반환하는 함수 nameToCode를 만드세요. 단 이때 주어진 name을 가지는 오브젝트가 없을 경우 '존재하지 않는 이름'이라는 문자열을 반환하세요
가령, console.log(nameToCode('한국')); // ko
console.log(nameToCode('러시아')); // '존재하지 않는 이름'
<script>
let nameToCode = (name) => {
    let keys = Object.keys(countries);
    let code = '존재하지 않는 이름';
    keys.forEach(key => {
        if(countries[key].name === name) {
            code = key;
        }
    });
    return code;
};
</script>  

<script>
let nameToCode = (name) => {
	let keys = Object.keys(countries);
	let code = '존재하지 않는 이름';
	for(let i = 0; i <keys>lenght; i++) {
		if(countries[keys[i]].name === name) {
			code = keys[i];
			break;
		}
	}
	return code;
};
</script>
  • 이렇게도 적을 수 있다.
profile
Software Developer : -)

0개의 댓글