11/27에 배운것에 대한 복기를 한다.

Ji Taek Lim·2020년 11월 27일

-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;
}

  • Test 2

수를 입력받아 각 자릿수를 모두 더한 값을 리턴해야 합니다.

let output = test2(1148);
console.log(output); // --> 14 = 1 + 1 + 4 + 8

2번째 문제는 어떻게 접근해야할까.

일단 다 하나의 스트링으로 쪼개준다.

그다음에

profile
임지택입니다.

0개의 댓글