Write a function that takes as its input a string and returns an array of
arrays as shown below sorted in descending order by frequency and then by
ascending order by character.
:: Example ::
characterFrequency('mississippi') ===
[
['i', 4],
['s', 4],
['p', 2],
['m', 1]
]
:: Example2 ::
characterFrequency('miaaiaaippi') ===
[
['a', 4],
['i', 4],
['p', 2],
['m', 1]
]
:: Example3 ::
characterFrequency('mmmaaaiiibbb') ===
[
['a', 3],
['b', 3],
['i', 3],
['m', 3]
]
var characterFrequency = function (string) {
};
문자열이 인풋으로 주어지면 중복되는 문자열의 개수를 나타내는 숫자를
문자와 함께 배열에 담아서 정렬한 다음 2차원 배열로 반환하라는 문제
var characterFrequency = function (string) {
let convertToObj = string
.split("")
.sort()
.reduce((all, one) => {
if (one in all) {
all[one]++;
} else {
all[one] = 1;
}
return all;
}, {});
let converToArray = [];
for (let key in convertToObj) {
converToArray.push([key, convertToObj[key]]);
}
converToArray.sort((a, b) => {
return b[1] - a[1];
});
console.log(converToArray);
return converToArray;
};
한번에 배열에 담는 방법도 있겠지만 객체로 한번 전환했다 한 이유는
MDN에도 나와있는 reduce()의 활용법 중 배열의 value들을 카운트해주는
사용법이 있기에 한번 전환해놓고 생각하면 쉬워서
항상 이런 문제를 마주하게 되면 일단 객체형태로 카운트 해놓고 보는 스타일이다.