JS repl.it2

younghyun·2022년 1월 27일
0

Function(함수) - 여러 인자

Assignment
index.js에서 meetAt 함수를 만들어주세요.
인자를 세개 받습니다.
첫번째 인자는 년도에 해당하는 숫자입니다.
두번째 인자는 월에 해당하는 숫자입니다.
세번째 인자는 일에 해당하는 숫자입니다.
년도 인자만 받았을 경우 → "1234년" 과 같은 형식의 문자열을 리턴 해주세요.
년도,월 인자를 받았을 경우 → 년도와 월을 조합해서 "1234년 5월" 과 같은 형식의 문자열을 리턴 해주세요.
년도,월,일 인자를 전부 받았을 경우 → 년도,월,일을 조합해서 "1234/5/6" 과 같은 형식의 문자열을 리턴 해주세요.

function meetAt(year, month, date) {

  if (year && !month && !date) {
    return year+'년'
  }
  if (year && month && date) {
    return year+'/'+month+'/'+date
  }
  if (year && month && !date) {
    return year+'년 '+month+'월'
  }
}

meetAt(1990)
// 'undefined' >> falsy 거짓 같은 값.

// 아래의 코드는 절대로 수정하거나 삭제하지 마세요.
module.exports = {meetAt};

배열

var 변수명 = [];

element: 배열의 값 하나하나. 요소와 요소 사이에는 쉼표로 구분. 요소 자리에는 이제까지 배운 String, Number, Array 모두 가능
배열 index: 0부터 시작
배열 접근 : 배열이름[index]

for문

Assignment
findSmallestElement 함수를 구현해 주세요.
findSmallestElement 의 arr 인자는 숫자 값으로만 이루어진 배열입니다.
arr 의 값들 중 가장 작은 값을 리턴 해주세요.
만일 arr 가 비어있으면 0을 리턴 해주세요.
예를 들어, 다음과 같은 배열이 인자(input)으로 들어왔다면 1이 리턴 되어야 합니다.
[20, 200, 23, 1, 3, 9]

// Assignment - 다음 함수 안에 코드를 구현하세요
function findSmallestElement(arr) {
  // your code here
  if (arr.length === 0) {
    return 0;
  } else {
    let min = arr[0];

    for(i = 0; i < arr.length; i++){
      if (arr[i] < min){
        min = arr[i];
      }
    } return min;
  }
}

console.log(findSmallestElement([5000, 300, 20, 10, 1]));


// 아래의 코드는 절대로 수정하거나 삭제하지 마세요.
module.exports = { findSmallestElement};

배열 조작

  • 요소추가
    • index로 접근하여 수정이나 추가
    • push()메소드 : 배열 마지막 부분 요소 추가
    • unshift()메소드 : 배열 맨 앞 부분 요소 추가
  • 요소 제거
    • pop()메소드 : 마지막 요소 제거, 마지막 요소 값 반환됨.

divideArrayInHalf 함수를 다음과 같이 구현해주세요.
divideArrayInHalf 함수는 array를 인자로 받습니다. 이 array는 숫자 값으로 만 구성되어 있으며 총 5개의 요소(element)들로 구성되어 있습니다.
divideArrayInHalf 함수는 인자로 들어온 array 로 부터 새롭게 구성된 배열 result 을 리턴합니다.
array 요소들 중 10과 같거나 작은 값의 요소들은 result의 맨 앞으로, 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴 해주세요.
재구성이 되는 순서는 array의 맨 뒤 요소부터 맨 앞 요소까지 입니다. 즉, 배열의 뒷 요소 부터 재구성을 진행해주세요.
예를 들어, 인자로 들어오는 array가 다음과 같을 때,
[1, 20, 10, 5, 100]

// Assignment - 다음 함수 안에 코드를 구현하세요.
let apple = [1, 20, 10, 5, 100];

function divideArrayInHalf(array) {
    let result = [];
    let length = array.length;

    for(i=0; i < length; i++) {
      let number = array.pop();
      if ( number > 10) {
        result.push(number);
      } else if ( number <= 10 ) {
        result.unshift(number);
      }
    }
    return result;
}
console.log(divideArrayInHalf(apple));

데이터 타입

  • 기본 자료형 (Primitive) 인 여섯 가지 데이터 타입
    String (문자열)
    Number (숫자)
    Boolean (true/false)
    Undefined
    Null
    Symbol (ECMAScript 6 에 추가됨)
    별도로 Object(객체) 도 있음

  • typeof 연산자
    "undefined" : 정의되지 않은 변수
    "boolean"
    "string"
    "number"
    "object" : 함수를 제외한 객체 또는 "object"
    "function"

    typeof null → "object" : null 이라는 데이터 타입이 object 로 반환. null 은 빈 객체를 참조하고(가리키고) 있어서.

  • 문자열

  • boolean타입
    true로 변환 되는 값
    문자열 : 비어 있지 않은 모든 문자열
    숫자 : 0이 아닌 모든 숫자
    객체: 모든 객체 ({ }, [ ] 포함)

false로 변환 되는 값
문자열 : " " (빈문자열)
숫자 : 0, NaN
객체 : null
undefined

조건문에서의 boolean 데이터 값 활용

let sam = 3;

if (sam === 3) {  //sam === 3 이 true이면
  // 실행
}

let msg = "message";

if (msg) {
  // 실행
}
해당 if 문은 비교나 검사할 조건 없이 msg 만 들어가 있습니다.
자바스크립트에서 문자열은 " "(빈 문자열)을 제외하고 모두 true 값을 갖습니다.
따라서 저 위의 msg 부분은 true 가 되고, if문이 실행됩니다.

아래의 if문은 숫자 0이 false로 변환되는 예시입니다. if문이 실행되지 않습니다.
let number = 0;

if (number) {
  // 실행 안됨
}

String

  • 대소문자
    toUpperCase()메소드 : 대문자로 변환. String형이 제공.
    toLowerCase()메소드 : 소문자로 변환. Stging형이 제공.
    두 메소드 전부, 기존 값 자체가 바뀌지는 않음.

    let lastName = 'Yeri Kim';
    let upperLastName = lastName.toUpperCase();
    let lowerLastName = lastName.toLowerCase();
    
    console.log(lastName); // Yeri Kim
    console.log(upperLastName); // YERI KIM
    console.log(lowerLastName); // yeri kim

    length속성 : String형도, 배열 길이 구할때 처럼 사용 가능

    if (phoneNumber.length !== 10 &&  phoneNumber.length !== 11) {
      alert("폰 번호 제대로 입력하셨나요?");
    }

    핸드폰 번호는 0으로 시작함. Number형으로 입력하면 앞의 0이 없이 뒷 숫자만 할당됨.
    Number형에는 length속성이 존재하지 않음. 따라서 따옴표를 이용해서 String형으로
    저장해야 함.

    let phoneNumber = 01012349876;
    
    console.log(phoneNumber);
    console.log(phoneNumber.length);

    indexOf()메소드 : 문자열에 특정 문자열이 들어있는지 확인하고, 있다면 몇번 째 순서에 해당 문자열이 있는지 알려줌. 해당 문자열이 없다면 -1반환, 욕설 차단 등에 활용 가능

    let info = "JavaScript는 프로래밍 언어이다.";
    let firstChar = info.indexOf("프로래밍"); 
    
    console.log(info, firstChar);
    
    if (firstChar !== -1) { 
      info = info.slice(0, firstChar) + "프로그래밍" + info.slice(firstChar+4, info.length); 
    }
    
    console.log(info);

    slice()메소드 : 문자열 일부 추출, 추출된 부분을 새 문자열로 반환, 원래 문자열 변경하지 않음.

    let result = text.slice(0, 1); // 첫 번째 문자만
    let result = text.slice(-1); // 마지막 문자만
    let result = text.slice(0); // 전체 문자열
    
    var a = [1, 2, 3, 4, 5]; 
    a.slice(0, 3); // [1, 2, 3]반환. 
    a.slice(3); // [4, 5]반환. 
    a.slice(1, -1); // [2, 3, 4]반환. 
    a.slice(-3, -2) // [3]반환.
    
    var jobs = ['programmer', 'designer', 'planner', 'sajang'];
    alert(jobs.slice(-2)); // array, ['planner', 'sajang'], 인자가 음수인 경우 시작점을 뒤에서부터 카운팅

    split()메소드 : 문자열을 하위 문자열 배열로 분할, 문자열을 하위 문자열 배열로 분할, 원래 문자열을 변경하지 않음.

let text = "How are you doing today?";
const myArray = text.split(" "); // 공백 기준 새 배열 만듦.
const myArray = text.split(""); // 공백 포함 문자 분할
const myArray = text.split(" ", 3); // 제한 매개변수 사용

splice()메소드 : 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경. 원본이 수정됨 ( slice()메소드가 원본이 유지 되는 것과는 다름 )

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

var numbers = [1,2,3,4,5,6,7,8,9,10]; alert(numbers.splice(2)); // array, [3,4,5,6,7,8,9,10], 시작점 2부터 배열의 마지막 원소까지를 대상으로 한다.
alert(numbers); // array, [1,2], 원본이 수정된다.

var numbers = [1,2,3,4,5,6,7,8,9,10]; alert(numbers.splice(2, 4)); // array, [3,4,5,6] 

var numbers = [1,2,3,4,5,6,7,8,9,10]; alert(numbers.splice(2, 4, 'three', 'four', 'five', 'six')); 
// array, [3,4,5,6] alert(numbers); 
// array, [1,2,three,four,five,six,7,8,9,10]

join()메소드 : 배열의 원소를 결합해서 하나의 문자열로 만듦.

array.join(separator); // sperator는 string형으로 필수.
배열의 원소를 하나의 문자열로 결합할 때 원소 사이에 위치할 문자열.

Assignment
String의 slice() 는 자주 사용 되는 문자열 메소드 중 하나 입니다. 먼저 slice 에 대한 설명을 가볍게 읽어봅시다 👉 slice설명

그 후 sliceCityFromAddress 함수를 구현해 주세요.
sliceCityFromAddress 함수는 address 를 인자로 받습니다.
address 는 주소를 나타내는 string 입니다.
주어진 주소가 어느 도시 인지를 찾아 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.
도시는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".
"도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.
예를 들어, 다음과 같은 주소가 주어졌다면;

"경기도 성남시 분당구 중앙공원로 53"
"경기도 성남시 분당구 중앙공원로 53"
다음과 같은 값이 리턴되어야 합니다:

"경기도 분당구 중앙공원로 53"

// Assignment - 다음 함수 안에 코드를 구현하세요
function sliceCityFromAddress(address) {
  // your code here
const words = address.split(" ")
for (let i = 0; i < words.length; i++) {
  const wordLength = words[i].length
  if (words[i][wordLength-1] === '시')   {
    words.splice(i, 1) 
    break;
  }
}

// console.log(words.join(' '))
return words.join(' ')

}

console.log(sliceCityFromAddress("경기도 성남시 분당구 중앙공원로 53"));

module.exports = {sliceCityFromAddress}

String <-> Number 변환

자바스크립트는 데이터 타입 신경쓰지 않음. ( 양날의 검 )

다른 언어에서는 변수에 어떤 값을 할당해서 변수의 type이 확정되면, 다른 type의 값을 할당할 수 없음.

아래 상황에서 헷갈림

typeof연산자로 데이터 타입 확인


NaN(Not a Number)오류 발생 - 경우 숫자에만 사용되는 연산

"+"연산자 : 문자, 숫자 연산 모두 가능
"-"연산자 : 숫자 연산 가능

Number()함수 : string형에서 Number형으로 전환할 수 있음.

parseInt(string, radix)
문자열을 정수로 바꾸는 함수
string: 숫자로 변환할 문자열
radix : optional, string 문자열을 읽을 진법(수의 진법 체계의 진법), 2~36의 수. 입력하지 않으면 10진법으로 처리함.

parseFloat(string)
수로 시작할 때 그 수를 실수로 바꾸는 함수
띄어 쓰기로 여러 개의 수가 있으면 첫번째 수만 바꿈
공백으로 시작하면 공백은 무시함.
수가 아닌 문자로 시작하면 NaN을 반환함.

parseInt("1.901");
parseFloat("1.901");
Number("1.901");
parseInt("200") + 1;

-연산자 활용

var numberAsNumber = "1234"; 
var numberAsString = numberAsNumber - 0;

console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

Number형에서 String형으로 반환
toString()함수

var numberAsNumber = 1234; 
var numberAsString = numberAsNumber.toString();

console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

+연산자 활용

var numberAsNumber = 1234; 
var numberAsString = 1234 + "";

console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

Assignment
nationalPensionRemainingYearCount 함수를 구현해주세요.
우리나라는 국민연금을 만 65세 부터 받을 수 있습니다.
nationalPensionRemainingYearCount 는 age_string 이라는 input을 받습니다.
age_string 은 나이 값인데 string형 값으로 되어 있습니다.
주어진 나이부터 몇년이 지나야 국민연금을 받을수 있는지 리턴 해주세요.
리턴 값은 다음과 같습니다.
"앞으로 20년 남으셨습니다"
"앞으로 20년 남으셨습니다"
예를 들어, age_string 값이 다음과 같다면:
"35"
"35"
리턴 값은 다음과 같아야 합니다.
"앞으로 30년 남으셨습니다"

function nationalPensionRemainingYearCount(age_string) {
  // Your code here
  let numberAge = Number(age_string);
  let pension = 65 - numberAge;
  return "앞으로 " + pension + "년 남으셨습니다";

}

console.log(nationalPensionRemainingYearCount("0"));
profile
선명한 기억보다 흐릿한 메모

0개의 댓글