-Twittler 를 다시 만들어 보았다.
-Test4를 만들어보았는데 addEventListener 가 이해가 잘 되지 않았기 때문에 유투브를 찾아 보게 되었다.
-내가 만들면서 이해가 되지 않았던점 물론 바로 바로 알아야되지만 내가 구현하기 위해서는 기본적인 이해가 필요하다.
문자열을 입력받아 문자열에 존재하는 각 단어의 개수 정보를 담은 객체를 리턴해야 합니다.
일단 이것을 하기 위해서는 문자열이라는 것을 알아야하는데
"I love coding" 정도로 생각하면 되겠다.
이 단어의 개수 정보를 담은 객체를 리턴해야하기 때문에
{I: num, love: num, coding: num} 의 형식으로 출력을 해야한다.
쉽지않다.
스트링 타입을 객체 타입으로 변환한다.
여기서 가장 중요한 점은 어떻게 변환을 해주는가 인것같다.
이걸 어떻게 변환할까? 지금도 고민이다.
생각을 해보자 어떻게 문자열을 객체로 변환할 수 있을까.
문자열을 객체로 변환하기 위해서는 하나하나씩 쪼개서
새로운 객체에 넣어주는 수밖에 없다.
고차함수가 나와야하는데
고차함수는 어렵다.
코플릿을 봐야겠다.
함수를 한번에 여러번 써서 함수X함수X함수X함수X함수
끊임없이 함수를 더할때 쓰는 문이다 그렇기 때문에
For 문과도 같이 쓴다 유투브 링크를 남긴다.
https://www.youtube.com/watch?v=1pqJphcounU
_~~var process = [
function(input) {return input+10;}
function(input) {return input*input;}
funciton (input) {return input/2;}
];_
var input =1
for (var = 0, i <process.length ; i++) {
input = process[i](input)
////function(input)이라는 이야기다
First class citizen 1등 시민이라는 이야기인데..
-콜백 함수
https://www.youtube.com/watch?v=R2AcG_SoCMk
var numbers = [10,9,8,7,6,5,4,3,2,1,1,10]
numbers.sort();
numbers 는객체 배열.
sort는 메소드이며
이는 사용자 정의 함수라고 한다.
console.log(numbers.sort())
개발자 도구를 써서 실행시켜 보자
근데 실행시켜 보면
[1, 1, 10, 10, 2, 3, 4, 5, 6, 7, 8, 9]
로 나온다 왜냐하면 10은 1로 시작하기 때문에 문자정렬을 하는 것 같다.
하지만 우리가 원하는 것은 이것이 아니고
숫자의 순서로 정렬되기 위하기 때문이기 때문에
그렇기 때문에 다시
var numbers = [10,9,8,7,6,5,4,3,2,1,1,10]
var sortfunc = function (a, b) {
console.log(a,b)
}
console.log(numbers.sort(sortfunc))
sortfunc 의 함수를 다시 sort에 넣으므로써
함수에 대한 식을 다시 한번 실행해준다
var numbers = [10,9,8,7,6,5,4,3,2,1,1,10]
var sortfunc = function (a, b) {
console.log(a,b)
}
console.log(numbers.sort(sortfunc))
a, b 를 비교하겠다는 이야기다
9 10
8 9
7 8
6 7
5 6
4 5
3 4
2 3
1 2
1 1
a 와 b의 비교한 결과를 따라서
만약에 a가 b보다 크다면
var numbers = [10,9,8,7,6,5,4,3,2,1,1,10]
var sortfunc = function (a, b) {
console.log(a,b)
if (a > b) {
return 1
} else if (a < b) {
return -1
} else {
return 0
}
}
console.log(numbers.sort(sortfunc))
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10]
리턴 값이 이렇게 나왔다.
간단하게 할 수 있다.
var sortfunc = function (a, b) {
return a-b
}
console.log(numbers.sort(sortfunc))
콜백함수가 되는 것이다.
이쯤 되어서 TEST4
문자열을 입력받아 문자열에 존재하는 각 단어의 개수 정보를 담은 객체를 리턴해야 합니다를 다시 생각해보면
문자열을 입력받아 문자열에 존재하는 각 단어의 개수 정보를 담은 객체를 리턴해야합니다.
만약에 글자를 비교하는데 대문자가 들어가있으면 비교하기가 어려우니
let lower = toLowerCase(); 라는 함수를 써서
글자 크기를 줄여주고
let split = lower.split(' ') 한칸씩 띄워줘서 글자를 분리한다음에
이때 string type이 'a aaa aaa aaa'인 경우도 있으니
let filter = split.filter(function(a) {
return a.length !== 0
});
고차함수를 한번 써줍니다. filter라는 함수를 써서 걸러줄건데
그 안의 배열 a의 길이가 0이 아니라는 것은 빈칸이 아닌거겠지요?
그럼 실제로 존재하는 문자열만 return 해줍니다.
이것은 배열 형태로 됩니다.
let newObj = {}
로 정의 해주고 for 문을 이용해서 Key와 Value 값을 지정해줄텐데
처음하는 사람은 딱 들어오지 않을 수 있습니다.
for (let i =0 ; i < filter.length ; i++) {
를 작성해주고 그럼 배열형태로 변환된 것들에 대해서 newObj에 넣는다는 것은 생략하지만
if ( newObj[filter[i]] === undefined) {
// 키 값과 밸류 값을 지정해주는 것입니다. 조건문입니다.
newObj[filter[i]] = 1
}
이 객체의 키값은 1이라는 것을 가진다.
else if ( newObj[filter[i]] !== undefined ) {
/// 아니라면 하나씩 더해 라는 것입니다.
newObj[filter[i]] = newObj[filter[i]] + 1
Test 1
function test1(str) {
let lower = str.toLowerCase()
let split = lower.split(' ')
let newObj = {}
let filter = split.filter( function(a){
return a.length !== 0
});
for (let i =0 ; i < filter.length; i++) {
if (newObj[filter[i]] === undefined) {
newObj[filter[i]] =1
} else if (newObj[filter[i]] !== undefined) {
newObj[filter[i]] = newObj[filter[i]] +1
}
}
return newObj;
}
수를 입력받아 각 자릿수를 모두 더한 값을 리턴해야 합니다.
let output = test2(1148);
console.log(output); // --> 14 = 1 + 1 + 4 + 8
2번째 문제는 어떻게 접근해야할까.
일단 다 하나의 스트링으로 쪼개준다.
그다음에