// 구조분해할당
function solution(dot) {
const [num,num2] = dot;
const check = num * num2 > 0;
return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}
function solution(num_list) {
const [a, b] = [...num_list].reverse();
return [...num_list, a > b ? (a-b):a*2];
}
//const [a, b]는 [...num_list] 의 원소 중 순서대로 a와 b에 할당하는구나
// 콜백함수를 작성할때 {()=>{return A}} or (() => a)
// {}를 쓰면 반드시 return 을 써줘야 하고, 만약 {}를 쓰지않으면,
// return을 쓰지 않아도 됨
function solution(my_string, letter) {
let arr = my_string.split(""); //문자열을 배열로 바꿈 ['h','e','l','l','o']
let filteredArr = arr.filter((item) => { return item !== letter})
let mystring = filteredArr.join('') // Array.from(my_string) 이것도 문자열을 배열로 바꿈
return mystring;
}
// replaceAll 메서드
function solution(my_string, letter) {
return my_string.replaceAll(letter, "");
}
let str = "Hello, Hello, Hello";
let newStr = str.replaceAll("Hello", "Hi");
console.log(newStr); // "Hi, Hi, Hi"
//arr.splice(3, 2)
let arr = [1,2,3,4,5]
let removedElement = arr.splice(3, 2) //는 인덱스 3부터 2개의 요소를 제거
console.log(removedElement) //[4,5]
console.log(arr)//[1,2,3]
//arr.splice(3, 2)는 삭제된 요소도, 삭제된 배열도 모두 얻을 수 있다
//Math.floor(): 소수점 아래의 수를 버리고 정수 부분만 남깁니다.
let num1 = 3.14;
let integer1 = Math.floor(num);
console.log(integer1); // 출력: 3
//Math.ceil(): 소수점 아래의 수를 올림하여 정수 부분을 반환합니다.
let num2 = 3.14;
let integer2 = Math.ceil(num);
console.log(integer2); // 출력: 4
//for(let a of array)
function solution(num_list) {
var answer = [0,0];
for(let a of num_list){
answer[a%2] += 1
}
return answer;
}
// 오름차순과 내림차순 정렬
numbers.sort((a, b) => b - a) 는 내림차순이고,
numbers.sort((a, b) => a - b)는 오름차순
//arr.includes(ele) true인지 false인지 리턴한다
let numbers = [1, 2, 3, 4, 5];
console.log(numbers.includes(3)); // 출력: true
let text = "Hello, world!";
console.log(text.includes("world")); // 출력: true
// 문자열에서 aeiou를 삭제하기 => replace 메소드 사용
function solution(my_string) {
return my_string.replace(/[aeiou]/g, '');
}
{/* my_string.replace(/[aeiou]/g, '')는 my_string 문자열에서 정규 표현식 /[aeiou]/g에 해당하는 모든 부분을 빈 문자열('')로 대체합니다.
[aeiou]: 대괄호 내에 있는 문자 중 하나와 매치됩니다. 여기서는 a, e, i, o, u가 모음에 해당합니다.
/.../: 정규 표현식을 감싸는 슬래시(/)입니다. 패턴을 나타냅니다.
g: 정규 표현식의 플래그(flag)로, 문자열 전체에서 패턴과 일치하는 모든 부분을 찾습니다.
따라서 /[aeiou]/g는 문자열 내의 모음(a, e, i, o, u)을 모두 찾는 역할을 합니다.
replace() 메서드는 주어진 패턴과 일치하는 부분을 대체 문자열로 교체합니다. 여기서는 모음을 빈 문자열로 대체하여 제거하는 역할을 합니다.
my_string.replace(/[aeiou]/g, '')의 결과인 새로운 문자열이 solution 함수의 반환값으로 사용됩니다.
예를 들어, my_string이 "Hello, World!"인 경우 다음과 같이 동작합니다:
"Hello, World!"에서 소문자 모음(a, e, o)을 찾아 모두 제거하면 "Hll, Wrld!"가 반환됩니다.
이 코드는 주어진 문자열에서 특정 패턴을 제거하고 싶을 때 유용하게 사용될 수 있습니다.*/}
//특정 문자열을 n번 만큼 더할때 쓰는 메서드 repeat() 메서드
const originalString = 'Hello, world! ';
const repeatedString = originalString.repeat(3);
console.log(repeatedString);
// 출력: 'Hello, world! Hello, world! Hello, world! '
function solution(my_string, n) {
var answer = [...my_string].map(v => v.repeat(n)).join("");
console.log(answer);
return answer;
}
//전개 연산자는 다른 이터러블 객체에도 사용할 수 있습니다
let my_string = "hello"
일때 console.log([...my_string]); 는 ['h', 'e', 'l', 'l', 'o']로 출력
//전개 연산자는 문자든 객체든 배열이든 하나의 원소로 각각 풀어버리는 구나
//기존값인 (acc)에서 현재값인 cur가 더해짐
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, cur) => {
return acc + cur;
}, 0);
console.log(sum); // 15
//for(let i =0; i < num_list.length/2; i++) 여기서 i가 1이 아닌 2씩 늘어나고 싶으면 어떻게 적어?
//for(let i =0; i < num_list.length/2; i+=2) 로 작성하면 됩니다.
//자바스크립트 toLowerCase
var str = "HELLO WORLD";
var lowerCaseStr = str.toLowerCase();
console.log(lowerCaseStr); // "hello world"
/*((el) => 뒤에 () 가 아닌 {}를 써야 하는 이유가 뭐야?
그 대답으로 ((el) => 뒤에 코드가 한줄로 끝나게 리턴되면 ()을 쓰고,
한 줄이 아닌 그 이상으로 코드가 길어지면 {return }을 쓴다. */
네, 맞습니다. 익명 함수 객체는 함수 이름이 없기 때문에 함수 객체 뒤에는 중괄호({})를 사용해야 합니다. 중괄호를 사용하지 않으면 함수 객체가 호출되지 않습니다.
익명 함수 객체의 코드가 한 줄로 끝나면 중괄호를 생략할 수 있습니다. 하지만 익명 함수 객체의 코드가 한 줄 이상으로 길어지면 중괄호를 사용해야 합니다.
예를 들어, 다음 코드는 익명 함수 객체의 코드가 한 줄로 끝나는 경우입니다.
const el = () => {
return 1;
};
//이 코드에서 익명 함수 객체의 코드는 return 1;입니다. 코드가 한 줄로 끝나기 때문에 중괄호를 생략할 수 있습니다.
//예를 들어, 다음 코드는 익명 함수 객체의 코드가 한 줄 이상으로 길어지는 경우입니다.
const el = () => {
if (true) {
return 1;
} else {
return 2;
}
};
//이 코드에서 익명 함수 객체의 코드는 if (true) { return 1; } else { return 2; }입니다. 코드가 한 줄 이상으로 길어지기 때문에 중괄호를 사용해야 합니다.
//findIndex 메세드 => 배열에서 음수인 수의 인덱스를 구한다
function solution(num_list) {
return num_list.findIndex((num) => num < 0);
}
function solution(num_list) {
let Index = num_list.findIndex((el)=> el < 0);
return Index;
}
//findIndex((el)=>~~)
//()에서 만족하는 첫번째 원소의 인덱스를 내뱉는다
//slice 메서드
slice 메서드는 배열이나 문자열의 일부분을 추출할 때 사용하는 메서드입니다.
예를 들어, my_string.slice(-1*n)은 문자열 my_string의 뒤에서부터 n개의 문자를 추출합니다.
이때, slice 메서드는 원본 배열이나 문자열을 변경하지 않고 새로운 배열이나 문자열을 반환합니다.
예를 들어, arr.slice(1, 3)은 배열 arr에서 인덱스가 1인 요소부터 인덱스가 3인 요소까지를 복사합니다. 이때, 인덱스가 3인 요소는 제외됩니다.1
또 다른 예시로는 arr.slice(-2)는 배열 arr에서 인덱스가 -2인 요소부터 제일 끝 요소까지를 복사합니다.
arr.slice(-2)는 배열 arr에서 인덱스가 -2인 요소부터 제일 끝 요소까지를 복사합니다.1
음수 인덱스는 배열의 끝에서부터의 길이를 나타내며, -1은 배열의 마지막 요소를 나타냅니다.2 따라서 -2는 배열의 마지막에서 두 번째 요소를 나타냅니다.
function solution(num_list, n) { return num_list.slice(n - 1); }
//n-1 인덱스부터 끝 인덱스까지
//자바스크립트에서 문자열을 숫자로 바꾸는 메서드
parseInt()는 문자열을 정수로 바꿈
// parseInt("123")은 123 반환
// Number("123") 123 반환
//“splice 메서드와 slice 메서드의 공통점과 차이점
splice 메서드(시작되는 인덱스, 갯수)와 slice 메서드(시작된 인덱스, 바로 앞에서 끝는 인덱스)는 둘 다 배열에서 요소를 추출하는 메서드입니다.
그러나 둘의 차이점은 splice 메서드는 원본 배열에서 요소를 제거하고 제거된 요소를 반환합니다. 반면 slice 메서드는 배열에서 지정된 범위의 요소들을 새로운 배열로 반환합니다. 또한 slice 메서드는 원본 배열을 변경하지 않습니다.
반면 slice 메서드는 배열에서 지정된 범위의 요소들을 새로운 배열로 반환합니다. 또한 slice 메서드는 원본 배열을 변경하지 않습니다.
const arr = [1, 2, 3, 4];
const removed = arr.splice(1, 1);
console.log(arr); // [1, 3, 4]
console.log(removed); // [2]
const arr = [1, 2, 3, 4];
const sliced = arr.slice(1, 4);
console.log(arr); // [1, 2, 3, 4]
console.log(sliced); // [2, 3, 4]
// filter 메서드는 배열에서만 사용할 수 있습니다. 문자열에서는 사용할 수 없습니다.
//isNaN()의 예시를 보여줘
자바스크립트에서 NaN은 Not a Number의 약자로 숫자가 아닌 값을 나타냅니다. 숫자가 아닌 값에 연산을 수행하거나 0을 0으로 나누면 NaN이 출력됩니다.1 NaN은 다른 모든 값과 달리 같음 연산(==, ===)을 사용해 판별할 수 없습니다. NaN == NaN, NaN === NaN은 false로 평가되기 때문입니다. 그래서 isNaN() 함수를 사용하여 NaN을 판별하는 함수가 필요합니다.
console.log(isNaN(123)); // false
console.log(isNaN('123')); // false
console.log(isNaN('Hello')); // true
console.log(isNaN(undefined)); // true
전개연산자
function solution(my_string) {
return [...my_string].reduce((acc,cur)=> {return Number(cur) ? acc + Number(cur) : acc},0)
}
//['1','a','2','b','3','c','4','d','1','2','3']
for(let i = start; i <= end; i+= -1)에서 i가 1씩 감소하려면
i가 1씩 감소하려면 i+= -1 대신 i-= 1로 수정하면 됩니다. 즉, for(let i = start; i <= end; i-= 1)와 같이 작성하면 됩니다.
그러면 for(let a of b)는 array에 쓰이고, for(let a in b)는 객체에 쓰인다고 생각하면 돼?
네, 맞습니다. 일반적으로 for...of 반복문은 배열과 같은 순회 가능한 객체인 iterable에 대해 사용됩니다. 배열은 iterable이기 때문에 for...of 반복문을 사용하여 배열의 요소를 반복할 수 있습니다.
반면에 for...in 반복문은 객체의 속성을 열거할 때 사용됩니다. 객체의 속성은 순회 가능한 순서가 없으므로 for...in 반복문을 사용하여 객체의 속성을 반복할 수 있습니다.