function charCount(input) {
  if (!input) {
    return {};
  }
  if (typeof input !== 'string') {
    throw new Error('Input is not String');
  }
  let result = new Object();
  //  문자열을 소문자로 바꾸고 문자 단위로 나눈 뒤
  // 소문자이고 숫자인지 정규식을 사용해 필터링하고 정렬합니다.
  let charArray = input
    .toLowerCase()
    .split('')
    .filter((c) => /[a-z0-9]/.test(c))
    .sort();
  for (let i = 0; i < charArray.length; i++) {
    let char = charArray[i];
    result[char] = result.hasOwnProperty(char) ? result[char]++ : 1;
  }
  return result;
}

출력 예시

console.log(charCount('abc'));
// { a: 1, b: 1, c: 1 }
console.log(charCount('c b a a a 1 2 3'));
// { '1': 1, '2': 1, '3': 1, a: 1, b: 1, c: 1 }
console.log(charCount(123));
// Error: Input is not String
console.log(charCount(''));
// {}
console.log(charCount());
// {}
console.log(charCount('Hi, my name is Jinsu!!'));
// { a: 1, e: 1, h: 1, i: 1, j: 1, m: 1, n: 1, s: 1, u: 1, y: 1 }

다른 방식

function charCount2(str) {
  let obj = new Object();
  for (const char of str) {
    char = char.toLowerCase();
    if (/[a-z0-9]/.test(char)) {
      obj[char] = ++obj[char] || 1;
    }
  }
  return obj;
}

+ Recent posts