wecode JS replit 19번 복습

juno·2022년 7월 21일
0

replit 복습

목록 보기
1/4

Assignment

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

그 후 sliceCityFromAddress 함수를 구현해 주세요.
sliceCityFromAddress 함수는 address 를 인자로 받습니다.

address 는 주소를 나타내는 string 입니다.

주어진 주소에서 도시를 찾아 삭제하고 새로운 주소를 리턴해 주세요.

도시는 무조건 ‘시’로 끝납니다. 예) “서울특별시”, “성남시”

‘시’는 주소에 한번만 포함되어 있습니다.

예를 들어, 다음과 같은 주소가 주어졌다면

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

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

1차 풀이 코드

function sliceCityFromAddress(address) {
 // 풀이 1
  let doIndex = address.indexOf("도");
  let siIndex = address.indexOf("시");
  console.log(doIndex);
  console.log(siIndex);
  
  //풀이 2
  if (doIndex !== -1 && siIndex !== -1) {
    return address.slice(0, doIndex+1) + address.slice(siIndex+1);
  } 
  //풀이3
    else if(siIndex === -1) {
    return address
  }
}


sliceCityFromAddress("대한민국 경기도 성남시 분당구 중앙공원로 53");

풀이

1.'도' ,'시'로 끝나는 인덱스 위치를 찾고, 출력값을 확인해 보왔다.
만약 찾고자하는 인덱스가 없으면 -1을 출력한다.
2. doIndex, siIndex가 둘다 -1이 아니라면(둘다 찾을 수 있다면),
return (0부터 doIndex-1) + (siIndex+1부터 끝까지)
( +1 을 주는이뉴는 slice범위는 int 인자 두개를 받고, num1이상 num2미만이기 때문에)
3. siIndex를 찾을수없으면 전체 주소를 출력한다.

복습하면서,

복습하면서 위 코드의 오류를 찾았다.

sliceCityFromAddress("대한민국 성남시 분당구 중앙공원로 53");
위처럼 doIndex 값을 넣지 않으면 undefined 된다.

doIndex가 없고 siIndex가 있을 때의 조건을 추가하려 했으나 답이 나오지않았다..

그래서 새로 짜 보았다.

공백 기준으로 나누어 보자

function sliceCityFromAddress(address) {
// 풀이 1.
  let arr = address.split(" "); 
 //풀이 2.
  for (let i = 0; i < arr.length; i++) { 
    if (arr[i][arr[i].length - 1] === "시") { 
        arr.splice(i,1); 
        console.log(arr[i].length-1)
    }
  } 
 //풀이3 
  address = arr.join(' '); 
  return address;
}

풀이
sliceCityFromAddress("대한민국 성남시 분당구 중앙공원로 53"); 넣었다면,

  1. 배열을 만들었다, split으로 공백을 기준으로 잘라서 단어로 만든다.
    = '['대한민국','성남시','분당구','중앙공원로','53']'
  2. for문을 통해 각 인덱스에 접근했다. 그리고 각 인덱스의 마지막 자리수에 접근해서 '시'로 끝나는 문자를 찾는다.
    헷갈리는 부분 차근히 풀이 i = 1일때를 보자.
    arr[i]arr[i].length - 1] ==> 대한민국[대한민국.lenght-1] ==> 대한민국[3] ==> '국'을 가르킴
    인덱스는 0부터 시작하는 것을 깜빡하면 헷갈린다.
  3. 한칸 공백으로 다시 join해준다.

트렌드 따라가기 (ES6버전)

이를 ES6버전을 적극 활용하여 바꿔보았다.

for - in 사용

function sliceCityFromAddress(address) {
  let arr = address.split(" "); 
 //풀이 1.
  for (let i in arr) { 
    if (arr[i][arr[i].length - 1] === "시") { 
        arr.splice(i,1); 
        console.log(arr[i].length-1)
    }
  } 
  address = arr.join(' '); 
  return address;
}

arr[배열]의 length를 알아서 파악하는 for -in !!

filter 사용

function sliceCityFromAddress(address) { 
  return address
    .split(" ")
    .filter(e => e[e.length - 1] !== "시")
    .join(" ")
}

구글링하다 찾은 정답이다.
풀이하자면 공백으로 나누고 '시'가 없는것만 filter 그 다음은 다시 공백으로 join.

오늘 확실히 알고 넘어가는 것들

  1. slice(num1,num2)
const int = 123456
const string = '문자입니다'
const arr = ['이','것',2,'배','열']
const obj = {ket:'vale', 이건:'오브젝트', 키값은문자도:'따음표필요없네'}

console.log(int.slice(2,4))
console.log(string.slice(2,4))
console.log(arr.slice(2,4))
console.log(obj.slice(2,4))

num1이상부터 num2미만까지 컷한다.
위의 코드를 출력해봐서 컷 할 수 있는 코드를 파악해보자.

  1. for -in
const arr = ['어','느','게','진','짜','일','까',1,3,2,'오'];
for(let i in arr) {
  console.log(arr[i])
}

배열 길이를 알아서 파악해준다. 진짜 supercode다..

  1. filter

우선 엄청 간단한 예제

const arr = [1, 10, 20, 30, 40, 50, 60]

const b =arr.filter(i => i>30)
console.log(b)

30 이상인 것만 filter 여기서 중요한 건 필터 한 것은 변수를 선언해서 값을 할당해 줘서야 한다

function isBigEnough(value) {
  return value >= 10;
}

 const arr = [12, 5, 8, 130, 44]
 const filtered = arr.filter(isBigEnough);
 console.log(filtered)

filter()안쪽은 함수를 파라미터로 할 수 있다.

profile
안녕하세요 인터랙션한 웹 개발을 지향하는 프론트엔드 개발자 입니다. https://kimjunho97.tistory.com => 블로그 이전 중

0개의 댓글