/**
* @name is-anagram.js - 아나그램을 판단하는 로직
*
* @author Jinma Yamashita jinma.hands@gmail.com
* @version v0.01
* @update: 2015-09-23
*/
(function () {
/**
* @function init - 비교할 대상을 지정하는 기능
*/
function init() {
btn.addEventListener('click', function () {
var btn = document.getElementById('btn');
var str1 = document.getElementById('str1').value;
var str2 = document.getElementById('str2').value;
var res = compare(str1, str2);
var result = document.getElementById('result');
if (res) {
result.innerHTML = 'A valid anagram!';
} else {
result.innerHTML = 'Not a valid anagram.';
}
});
}
/**
* @function intoMix - 비교할 스트링을 하나의 배열로 만드는 기능
*
* @param {string} str1 - 첫번째 문자열
* @param {string} str2 - 두번째 문자열
* @return {array} arr - 첫번째와 두번째 문자열을 넣은 배열
*/
function intoMix(str1, str2) {
var arr = [];
for (var item in str1) {
arr.push(str1[item]);
arr.push(str2[item]);
}
return arr;
}
/**
* @function isEven - 짝수인지 홀수인지 확인하는 기능
*
* @param {number} n - 배열의 갯수
* @return {boolean}
*/
function isEven(n) {
if (n % 2 === 0) {
return true;
} else {
return false;
}
}
/**
* @function compare - 아나그램을 판단하는 기능
*
* @param {string} str1 - 첫번째 문자열
* @param {string} str2 - 두번째 문자열
* @return {boolean}
*/
function compare(str1, str2) {
if (str1.length !== str2.length) {
return false;
}
// 결과를 담는 변수
var result = true;
var mixedArr = intoMix(str1, str2);
var i = 0;
mixedArr.forEach(function () {
var indices = [];
var idx = mixedArr.indexOf(mixedArr[i]);
while (idx != -1) {
indices.push(idx);
idx = mixedArr.indexOf(mixedArr[i], idx + 1);
}
// 배열에 홀수로 담겨있는 문자가 있으면 아나그램이 아니다.
if (!isEven(indices.length)) {
result = false;
}
i++;
return true;
});
return result;
}
init();
})();