어제 완전 날코딩과 조건문, 반복문을통해서 구구단을 출력하고 화면에 구현도 했는데, 이번에는 배열과 객체, 함수를 사용해서 구구단을 다시 만들어 보려고 한다🤗
💚학습 목표💚
💚요구 사항💚
구구단 결과을 배열에 저장한 후 배열의 결과를 출력한다.
<body>
<h1>배열을 통한 구구단</h1>
<script>
const result = [];
for(let i=2; i<=9; i++){
const row=[];
for(let j=1; j<=9; j++){
row.push(i * j);
}
result.push(row);
}
console.log(result);
</script>
</body>
💡
방법을 살펴보자면,
push
를 사용해서 i * j 값을 넣어준다.그 결과 구구단이 배열로 이쁘게 나온다 👍
하지만 나는 콘솔창에만 출력 할 것이 아니라 화면에도 예쁘게 내가 배열에 담은 구구단을 구현하고싶다. ➡️ 한번 해볼까?
<h1>배열을 통한 구구단</h1>
<div id="result"></div>
<script>
const result = [];
for (let i = 2; i <= 9; i++) {
const row = [];
for (let j = 1; j <= 9; j++) {
row.push(`${i} x ${j} = ${i * j}`);
}
result.push(row);
}
console.log(result);
const resultDiv = document.querySelector("#result");
resultDiv.innerHTML = result
.map((row, index) => {
return `<h3>${index + 2}단</h3><p>${row.join("<br>")}</p>`;
})
.join("");
이렇게 해주면 보시다시피 이렇게 구구단이 예쁘게 단마다 나온다.
💡 여기서 중요한 점
map()
기존의 배열에서 기존의 배열 그대로 새로운 배열을 만들어준다.
map을 통해 result 배열의 각 요소(row)를 h>와 p로 감싸서 HTML 형식의 문자열로 변환하고, index + 2를 사용하여 2단부터 시작하게 했다.
join()
이건 내가 처음보는 메서드였는데,배열의 모든 요소를 하나의 문자열로 결합해준다.
const fruits = ["apple", "banana", "cherry"];
const result = fruits.join(", ");
console.log(result); // 출력: "apple, banana, cherry"
이런식으로 배열의 모든 요소를 문자열로 합쳐준다. 이 메서드를 사용해서 나도 구구단을
const row = ["2 x 1 = 2", "2 x 2 = 4", "2 x 3 = 6"];
const result = row.join("<br>");
console.log(result);
// 출력: "2 x 1 = 2<br>2 x 2 = 4<br>2 x 3 = 6"
줄바꿈을 해준 것 ! 구구단을 통해서 배웠으니까 이제 안까먹을 것 같다 🤓
💚학습 목표💚
💚요구 사항💚
<body>
<h1>함수로 구구단 구현</h1>
<div id="result"></div>
<script>
function calculate(num) {
const result = [];
for(let i = 1; i <= 9; i++){
result.push(`${num} x ${i} = ${num * i}`);
}
return result;
}
function print(result) {
const resultDiv = document.querySelector('#result');
resultDiv.innerHTML = result
.map((row, index)=>{
return `<h3>${index + 2}단</h3><p>${row.join("<br>")}</p>`
})
.join("");
}
function main() {
const allResult = [];
for(let i=2; i <= 9; i++){
allResult.push(calculate(i));
}
print(allResult);
}
main();
</script>
</body>
💡
이 메인 함수를 살펴보자면,
계산 함수를 보자면(함수명은 어떤 역할을 하는 함수인지 알 수 있게 적어주기)
결과를 프린트 해주는 함수를 보자면,
.innerHTML
을 통해서 어떻게 그려 줄지를 map,join을 사용해서 그려준다.⚠️ 여기에서 주의 할 점 :
배열에서도 그렇고 index + 2 해주는 이유는 2단부터 시작이기 때문에 index 번호가 0부터 시작해서 index가 0일 때 2단, index가 1일 때 3단, …, index가 7일 때 9단을 표시해야 하므로 index + 2로 계산
💚학습 목표💚
💚요구 사항💚
<body>
<h1>객체로 구구단 구현</h1>
<div></div>
<script>
const timesTables = {
tables: {},
generate: function () {
for (let i = 2; i <= 9; i++) {
this.tables[i] = [];
for (let j = 1; j <= 9; j++) {
this.tables[i].push(`${i} x ${j} = ${i * j}`);
}
}
},
};
function displayTimesTable() {
const resultDiv = document.querySelector("div");
resultDiv.innerHTML = Object.keys(timesTables.tables)
.map((key) => {
const tableRows = timesTable.tables[key].join("<br>");
return `<h3>${key}단</h3><p>${tableRows}</p>`;
})
.join("");
}
timesTable.generate();
displayTimesTable();
</script>
</body>
(아.. 객체로 코드 쓰는게 가장 힘들었다...)
💡
일단 코드를 보자면,
tables
와 generate
를 만들어 주었다.generate는 계산 함수를 실행 시켜주는 value를 가졌다. object.keys
를 사용했다🤔 object.keys
는 객체의 모든 키를 배열로 반환해준다.
그니까 여기에서는 Object.keys(timesTable.tables)는 [2, 3, 4, ..., 9]와 같은 배열을 반환해준다.
그러고나서 map
을 사용해서 tableRows = timesTables.tables[key].join("<br>")
에서는 tables[key]에 저장된 계산식 배열을 br로 구분해 하나의 문자열로 결합한다.
예를 들어, key가 2일 때 tables[2]는 ["2 x 1 = 2", "2 x 2 = 4", ..., "2 x 9 = 18"]이고, join("<br>")
을 통해 2 x 1 = 2<br>2 x 2 = 4<br>...<br>2 x 9 = 18
와 같은 HTML 형식의 문자열로 변환해준다.
그리고 마지막에
timesTable.generate();
: 구구단 데이터를 객체에 생성
displayTimesTable();
: 구구단 데이터를 화면에 구현