for(초기화식; 조건식; 증감식) {
실행문;
}
let i = 0; // 변수 선언
for (; i < 7; i++) {
console.log('count: ' + i)
}
for (let i = 0;; i++) {
if (i > 7) { console.log(i + '살은 초등학생입니다.' )}
if (i >= 13) break;
}
for(;;)
예시는 while문 대신에 무한루프를 써야할 때 사용한다. - 이때 break로 빠져나와야 한다는 점! let i = 0;
for (;;){
i++;
console.log(i);
if(i> 5){
break
}
}
- 세미콜론
;
은 생략이 불가하다.- 모든 구성 요소 생략시 세미콜론은 반드시 2개 모두 포함되어야 한다.
let data = [
{ 회원번호: 0, 아이디: "a", 성별: "남", 나이: 21 },
{ 회원번호: 1, 아이디: "b", 성별: "남", 나이: 17 },
{ 회원번호: 2, 아이디: "c", 성별: "여", 나이: 6 },
{ 회원번호: 3, 아이디: "d", 성별: "여", 나이: 55 },
];
//나이가 20살 이상, 여성 구하기
let result = [];
for (let i = 0; i < data.length; i++) {
if (data[i]["성별"] == "여" && data[i]["나이"] >= 20) {
result.push(data[i]["회원번호"]);
}
}
console.log(result); //[3]
console.log(data.filter((i) => i["나이"] >= 20 && i["성별"] == "여"));
//나이 총 합 구하기
let 나이총합 = 0;
for (let i = 0; i < data.length; i++) {
나이총합 += data[i]["나이"];
console.log(나이총합); //99
}
console.log(나이총합 / data.length); //24.75
console.log(data.map((i) => i["나이"])); //[ 21, 17, 6, 55 ]
map
reduce
활용 식console.log(data.map((i) => i["나이"]).reduce((a, b) => a + b, 0)); //99
let 가장큰나이 = 0;
for (let i = 0; i < data.length; i++) {
if (가장큰나이 < data[i]["나이"]) {
가장큰나이 = data[i]["나이"];
}
}
console.log(가장큰나이);//55
⬇️이렇게 해도 됨!
Math.max(...data.map((i)=>i.나이));
가장작은 나이는 가장 큰 값으로 시작하게 해야함 (0이 가장 작으니깐요)
let 가장작은나이 = 1000000;
for (let i = 0; i < data.length; i++) {
if (가장작은나이 > data[i]["나이"]) {
가장작은나이 = data[i]["나이"];
}
}
console.log(가장작은나이); //6
⬇️이렇게 해도 됨!
Math.min(...data.map((i)=>i.나이));
let word = "hello world";
count = 0;
for (let i = 0; i < word.length; i++) {
if (word[i] == "l") {
count++;
}
}
console.log(count); //3
//문자열에 있는 숫자 다 더하기
let num = "12390812476";
sum = 0;
for (let i = 0; i < num.length; i++) {
sum += parseInt(num[i]);
// sum += Number(num[i]);
// sum += +num[i];
}
console.log(sum); //43
parseInt
를 활용해서 식을 썼는데, 이 방법 외에 sum += Number(num[i]);
sum += +num[i];
로 해주는 방법도 있다! arr = ["33", "29", "11", "55", "47"];
sum = 0;
let average = 0;
for (let i = 0; i < arr.length; i++) {
sum += parseInt(arr[i]);
average = sum / arr.length;
}
console.log(average); //35
arr = ["33", "29", "11", "55", "47"];
sum = 0;
let average = 0;
for (let i = 0; i < arr.length; i++) {
sum += parseInt(arr[i]);
}
console.log(sum / arr.length);
arr.length
로 나눠주기만 하면 끝 ~ sum = 0;
for (let i = 0; i < 101; i++) {
if (i % 2 == 0) {
sum += i;
}
}
⬇️ 이렇게 작성하는 것이 효율적! 기억하기
for (let i = 2; i < 101; i += 2) {
sum += i;
}
console.log(sum); //2550
word = "hello world";
result = "";
for (let i = 0; i < word.length; i++) {
// result += word[i]; //hello world
result = word[i] + result; //dlrow olleh
}
console.log(result);
result += word[i]
로 넣어주면 됐었다! result = word[i] + result;
로 해주면 반대로 한 글자씩 순회하며 넣어줌을 보고 코드를 이해하게 되었다. 0번째 순회 'h'+''
1번째 순회 'e' + 'h'
2번째 순회 'l' + 'eh'
3번째 순회 'l' + 'leh'
4번째 순회 'o' + 'lleh'
예를들어 S = (1,2,3,8,13,17,20) , result = (3,4)
let arr = [1, 3, 4, 8, 13, 17, 20];
let result = 1000000;
let index = 0;
for (let i = 0; i < arr.length; i++) {
if (result > arr[i + 1] - arr[i]) {
result = arr[i + 1] - arr[i];
index = i;
}
}
console.log(result); //1 => 두 수의 차
console.log(index); //1
console.log(arr[index], arr[index + 1]); //3 4
i arr[i+1]-arr[i] result index
0번째 순회 0 2 2 0
1번째 순회 1 1 1 1
2번째 순회 2 4 1(실행안됨) 1
3번째 순회 3 5 1(실행안됨) 1
4번째 순회 4 4 1 1
5번째 순회 5 3 1 1
Devide and conquer 분할정복
내가 정복할 수 있는건?
구구단에서 일단 내가 할 수 있는건 2단!
여기서 점점 늘려가자
어떤걸 가변으로 놔야할지를 생각하면서 논리적으로 생각하면서 정복하기
2단 코드
for (let i = 1; i < 10; i++) {
console.log(`2 X ${i} = ${2 * i}`);
}
while 문 이용
i = 1;
while (i < 10) {
console.log(`2 X ${i} = ${2 * i}`);
i++;
}
이중 for문으로 2~9단까지!
// 2-9단까지
for (let i = 2; i < 10; i++) {
for (let j = 1; j < 10; j++) {
console.log(`${j} X ${i} = ${j * i}`);
}
}
i = 2;
sum = 0;
while (i < 101) {
sum += i;
i += 2;
}
console.log(sum);
i = 2;
let j = 1;
while (i < 10) {
while (j < 10) {
console.log(`${i} X ${j} = ${i * j} `);
j++;
}
j = 1; // 이걸 적어줘야 9단까지 나온다!
i++;
}
do...while 문법은 while문과 비슷하지만 조건문 이전에 실행문이 있기 때문에 실행문의 코드가 반드시 한 번은 실행된다.
기본문법
do {
실행문;
} while(조건문);
let sum = 0;
let i = 0;
do {
i++;
sum += i;
} while (i < 10);
console.log(sum);
반복문이 조건에 따라 종료되기 이전에 종료를 원하면 break로 반복문에서 나올 수 있다. 반복문이 종료되면 그 다음 코드가 실행된다.
let i = 0;
while (i < 100) {
i++;
if (i === 14) {
console.log(i + '살 부터 중학생이 됩니다.');
break;
}
}
console.log('중학교 입학을 축하합니다');
continue문은 반복문의 다음 반복으로 이동한다.
실행 후 다음 루프로 넘어간다 - 메모리 잡아먹으니깐 조심해서 써야함
i = 0;
while (i < 10) {
i++;
console.log(i, "start");
if (i > 5) {
continue;
}
console.log(i, "end");
}
console.log("end");
/** 보면 1-5일때 if (i > 5) 를 충족시키지 않기때문에 console.log(i, "end"); 까지 같이 출력한다.
1 start
1 end
2 start
2 end
3 start
3 end
4 start
4 end
5 start
5 end
여기서부터는 if (i > 5) 를 충족시키기 때문에 continue 되어서 console.log(i, "end") 를 실행하지않고 다음 반복인 console.log("end"); 를 실행시킨다.
6 start
7 start
8 start
9 start
10 start
end
*/
break
나 continue
구문과 함께 사용하면 반복문을 컨트롤하기에 용이4단이 되었을 때 탈출하고 test 로 이동해라
그럼 4단에서 +1 되니깐 5로 시작하게 됨 (4단을 건너 뛰게 되는 것)
for (let x = 2; x < 10; x++) {
test:
for (let y = 1; y < 10; y++) {
if (x === 4) break test;
console.log(`${x} X ${y} = ${x * y}`);
}
}
- 레이블은 반드시
break
문 또는continue
문 위에 있어야 한다.break
문은 모든 레이블에서 사용할 수 있다.continue
문은 반복문에서만 사용 가능하다.
for of
를 쓸 수 없다. 이럴때 객테 리터럴에 for in
사용for (let i in value) {
console.log(i); //index만 출력한다 => key인셈
console.log(value[i]); //value값
}
위의 for in에서 value 값 뽑는걸 불편하게 느껴, 해소하고자 Object 메소드들이 생김.
key 값, value 값, key : value 쌍 값을 배열 형태로 반환하는 메소드
Object.keys
는 key
값만 배열 형태로 반환한다.let 포켓몬 = Object.keys(value3);
console.log(포켓몬);
/**
* [
'피카츄', '라이츄',
'파이리', '꼬부기',
'버터플', '야도란',
'피죤투', '또가스',
'메타몽'
]
*/
Object.values
는 value
값만 배열 형태로 반환한다.Object.values(pocketmons);
//[1, 2, 3, 4, 5, 6, 7, 8, 9]
Object.entries
는 key
, value
형태의 배열들을 반환for (let i of Object.entries(value3)) {
console.log(i); //[ '피카츄', 10 ] 이런형태로 출력
}
객체나 배열을 변수로 '분해’할 수 있게 해주는 특별한 문법
for (let [[a, b], j] of [
[[1, 2], 2],
[[1, 2], 4],
]) {
console.log(a, b, j);
}
/**
1 2 2
1 2 4
*/
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
Math.max(...arr1, ...arr2);
//둘을 merge 해주고 싶을 때
console.log([100, 200, ...arr1, arr2]);
//[ 100, 200, 1, -2, 3, 4, [ 8, 3, -8, 1 ] ]
let str = "hello world";
console.log([...str]);
/**
* [
'h', 'e', 'l', 'l',
'o', ' ', 'w', 'o',
'r', 'l', 'd'
]
*/
const languages = [ 'Java', 'Javascript', 'Python', 'Ruby', 'C', 'C++' , 'Node.js', 'Django'];
for (let lang of languages) {
console.log(lang)
}
for of
로 하는 이유는 가독성 측면에서 for of
가 더 편하게 읽히기 때문문자열을 거꾸로 나타내는 코드도 for of 로 더 손쉽게 할 수 있다.
let s = "";
for (let i of "hello world") {
s = i + s;
}
console.log(s); //dlrow olleh