function isIsogram(str) {
// TODO: 여기에 코드를 작성합니다.
if (str.length === 0) {
return true;
}
let lowStr = str.toLowerCase();
for (let i = 0; i < lowStr.length; i++) {
//console.log(lowStr[i]);
for (let j = i + 1; j < lowStr.length; j++) {
//console.log(lowStr[j]);
if (lowStr[i] === lowStr[j]) {
console.log(lowStr[i], lowStr[j]);
return false;
}
}
}
return true;
}
let output = isIsogram('aba');
console.log(output); // false
난 이중 포문으로 풀었는데,
완전 띠용한 문법이 레퍼런스로 나왔다.
레퍼런스 해석
for문에서 첫번째 반복할 때
10번째 코드에서 벌어지는 일!function isIsogram(str) { if (str.length === 0) { return true; } let cache = {}; //냅다 빈객체 선언 let strLowered = str.toLowerCase(); for (let i = 0; i < strLowered.length; i++) { if (cache[strLowered[i]]) { // 빈 객체에 문자열을 넣어? // 콘솔에 찍어보면 undefiend가 나옴, 당연함 // 왜냐하면, if({a})를 넣은 모양인데 a 키에 해당하는 값이 없다! // 따라서, if(falsy)한 값이 들어오고 // if문의 조건문이 거짓이므로 아래 return은 건너뛴다. return false; } cache[strLowered[i]] = true; // return을 건너뛴 {a}는 여기에서 {a:true} 값을 할당 받는다. } return true; //그리고 true를 리턴한다. }