const string = "Hello There!";
const charMap = {};
let max = 0;
let maxChar = '';
for(let char of string){
charMap[char] = charMap[char]+1 || 1;
}
for (let char in charMap){
if(charMap[char] > max){
max = charMap[char];
maxChar = char;
}
}
console.log(maxChar)
charMap[char] 값이 있으면 거기에 +1
false이면 charMap[char] 1을 추가.
MDN에서 보면
a && b => a값이 true이면 b값을 리턴, a 값이 false이면, a값 리턴
a || b => a값이 true이면 a를 리턴, a값이 false이면 b 리턴.
charMap[char] = charMap[char]+1 || 1;
H의 경우 false이므로, H: 1
e의 경우 fasle이므로 e:1
l의 경우 false이므로 l:1
l의 경우 true이므로 l:2
o의 경우 false 이므로 o:1
H값이 false이 이유는 undefined+1 은 NaN값이고, NaN값은 falsy값이고, 그래서 or연산자가 그다음을 리턴하기 때문.