TIL 20 | JS replit - for문, 데이터타입, number-string변환

개념을 이해했다고 생각했지만, 문제를 풀 때 배웠던 것들 중 선택하고 조합하여 문제풀이에 활용하는 것이 어렵게 느껴졌다. 오랜 시간 고민하고 해결했던 문제들을 정리하고자 한다. 갑자기 더 좋은 아이디어가 떠오르면 다시 돌아와서 풀어보자!🤙

😵 for 문

findSmallestElement

[문제]

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

[풀이]

function findSmallestElement(arr) {
  // your code here
  
  //arr가 비어있으면 0을 리턴
  if (arr.length === 0) {
    return 0;
  }
  //arr값들 중 가장 작은 값을 리턴
  else {
    let min = arr[0];
    for(let i in arr) {
      if(min>arr[i]) {
        min = arr[i]
      }
    }
    return min;
  }
}

변수 min을 arr[0]으로 설정하고(가상으로), arr를 순회하며 더 작은 값이 있을 시 min을 수정하도록 하는 방법으로 문제를 해결했다. 이 방법으로 가장 큰 값을 리턴하려면?

let max = arr[0];
    for(let i in arr) {
      if(max<arr[i]) {
        max = arr[i]
      }
    }
    return max;

😵 데이터 타입

대문자 < --- > 소문자

let name = 'Dabin An';
let upperName = name.toUpperCase();
let lowerName = name.toLowerCase();

console.log(name); // Dabin An
console.log(upperName); // DABIN AN
console.log(lowerName); // dabin an

.index of

특정 텍스트의 포함 유무 및 위치 확인

let name = 'dabin an'
name.indexOf('b') // 2
name.indexOf('a') // 1

index 위치로 알려주고, 해당 텍스트 중 제일 처음 나오는 위치를 알려준다.

여러 데이터 타입의 boolean 값

true

  • 문자열 : 비어 있지 않은 모든 문자열
  • 숫자 : 0 이 아닌 모든 숫자(length속성 없음)
  • 객체: 모든 객체 ({ }, [ ] 포함)

false

  • 문자열 : " " (빈문자열)
  • 숫자 : 0, NaN
  • 객체 : null(object)
  • undefined

sliceCityFromAddress

[문제]

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

다음과 같은 값이 리턴되어야 합니다:

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

[풀이]
천재같은.. 빛과같은.. 팀원분들의 도움으로 모든 경우에 적용될 수 있는 코드를 구현했다.

function sliceCityFromAddress(address) {
  return address
  //배열로 만들기 [경기도,성남시,분당구,중앙공원로,53]
  .split(" ")
  //배열의 요소 마지막 자리에 '시'가 없는 요소만 반환
  .filter(ele => ele[ele.length - 1] !== "시")
  //string 만들기 '경기도 분당구 중앙공원로 53
  .join(" ")
}

레플릿 문제를 pass하고도 계속 고민했던 이유는 [00구, 0000로, 00동] 의 0자리에 '시'가 들어가면 그 요소도 filter에서 걸러지기 때문 ㅠㅠ 완성 전 코드는 아래와 같다.

function sliceCityFromAddress(address) {
  return address
  .split(" ")
  .filter(element => element.indexOf("시") === -1)
  .join(" ")
}

도움을 요청했을 때, '00시'로 끝나는 배열의 요소를 찾기 위해 문자열의 length로 접근하면 될 것 같다는 조언을 받았고, 같이 실행해본 결과 성공했다! 그저 감탄,,,

😵 string-number

문자열이나 숫자는 '+' 를 사용할 수 있다는 공통점이 있다. 하지만 문자열에는 '-'가 불가능하며, NaN이라는 결과가 반환된다. (문자열에 '-'를 하면 숫자로 변환해서 계산해주지만, 오해의 소지가 있다.)

String -> Number

Number()

let birthYearInput = "1997";
console.log(typeof birthYearInput); //string

var numberBirthYear = Number(birthYearInput); 
console.log(typeof numberBirthYear); //number

parseFloat() / parseInt()

parseFloat("1.901");
parseInt("1.901");

parseFloat

  • 수로 시작할 때 그 수를 실수로 바꾼다.
  • 띄어 쓰기로 여러 개의 수가 있으면 첫번째 수만 바꾼다.
  • 공백으로 시작하면 공백은 무시한다.
  • 수가 아닌 문자로 시작하면 NaN을 반환한다.

parseInt

  • string을 n진법일 때의 값으로 바꾼다. n은 옵션으로 2부터 36까지 입력할 수 있다. 입력하지 않으면 10으로 처리한다.
  • string의 처리는 parseFloat()와 거의 같다.
  • 소수 부분은 버린다.
  • 0x로 시작하면 16진법으로 처리한다.

— 연산의 특성 활용

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

console.log(numberAsNumber, typeof numberAsNumber);// "1234" "string"
console.log(numberAsString, typeof numberAsString);// 1234 "number"

Number -> String

.toString();

let numberAsNumber = 123; 
let numberAsString = numberAsNumber.toString();

console.log(numberAsNumber, typeof numberAsNumber); // 123 "number"
console.log(numberAsString, typeof numberAsString); // "123" "string"

+ 연산의 특성 활용

let numberAsNumber = 1234; 
let numberAsString = 1234 + "";

console.log(numberAsNumber, typeof numberAsNumber); //1234 "number"
console.log(numberAsString, typeof numberAsString); // "1234" "string"

좋은 웹페이지 즐겨찾기