string을 주면 알파벳과 그 개수를 반환하는 function을 만들어보자
예를 들면, 'apple' 을 주면 {"a": 1, "p": 2, "l" : 1 ,"e" : 1}
를 반환하는 것이다.
순서는 이렇다.
- 글자 별로 반복문을 쓴다
- 객체에 해당 문자가 있으면 값을 +1해주고
- 객체에 없으면 해당 문자를 새롭게 1 추가해준다.
우선 객체로 반환해주어야 하기 때문에 값을 추가할
빈객체를 만들어주자(answer)
반복문을 쓰려면 string이 아닌 array로 바꿔주어야 한다.
스프레드 문법을 (...)사용하면 쉽게 array로 바꿀 수 있다.
반복문은 array함수인 forEach를 사용해 보자
forEach의 사용법이다
1. 화살표 함수
forEach((el) => {})
2.일반 콜백함수 사용
forEach(function(el){ } );
3.함수를 변수로..
forEach(함수이름);
forEach는 배열을 반복문 돌릴 때 유용하다.
const items = ['first', 'second', 'third'];
const copyItems = [];
for(let i = 0 ; i < items.length; i++){
copyItems.push(items[i]);
]
//forEach문을 쓰면 더 간편해진다
const items = ['first', 'second', 'third'];
const copyItems = [];
items.forEach(e => {copyItems.push(e);})
forEach를 사용해 만든 코드는 다음과 같다.
function analyzeString(str){
let answer = {};
[...str].forEach(function(e){
//만약 값이 있다면 = value가 0을 넘는다면
if(answer[e] > 0 ) {
answer[e] += 1;
//만약 값이 없다면 해당 키와 값1을 추가
} else {
answer[e] = 1;
}
})
console.log(answer);
}
함수를 사용해보면 결과가 잘 나오는 것을 확인할 수 있다.
analyzeString('banana');
//{"b" : 1, "a" : 3, "n" : 2}
const fruits = ['banana','apple','banana','apple','banana'];
const count = fruits.reduce((acc,cur)=> {
//첫 순회시 acc는 {}가 되고, cur은 'banana'이다
//{}에 cur가 키값으로, 요소의 개수를 프로퍼티 값으로 할당한다.
//원래 값이 있으면(acc[cur])에 1을 더하고
//없으면 (0) 1을 더한다.
acc[cur] = (acc[cur] || 0) + 1;
return acc;
//빈객체가 초기값이 된다
}, {} );
console.log(count); //{ banana: 3, apple: 2 }