++ 저번시간 배열 메소드 추가
모든 script에 let arr = [1,2,3,4,5];
배열이 있다는 가정하에 예시를 들겠음.
arr.indexOf(3);
: 주어진 값과 같은 아이템의 인덱스를 반환한다. 일치하는 아이템이 없다면 -1을 반환한다.console.log(arr.indexOf(3)); console.log(arr.indexOf(6));
: 중괄호와 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 ));
//[]
: 이름 없는 함수
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));
: 키 - 값 쌍으로 이루어진 것
- 자바에서 알고 있는 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>