Section2 DailyCoding RECAP 04050620

KoEunseo·2022년 9월 10일
0

Daily_Coding

목록 보기
10/21

04

function firstCharacter(str) {
  const arr = str.split(' ');
  let result = '';
  if(!str) return '';
  arr.map(el => result = result.concat(el[0]));
  // result = result + el[0];
  return result;
}

05

function firstReverse(str) {
  return str.split('').reverse().join('');
}

reverse()는 배열순서를 반전한다.
concat()은 arr + arr = arr
join()이 str으로 합침

  • reduce도 써보고싶었다... 다시 풀어볼것

map으로 써봄

function firstReverse(str) {
  // return str.split('').reverse().join('');
  let arr = str.split('');
  let reverse = arr.reverse();
  let result = '';
  reverse.map(el => result = result + el);
  return result;
}

reduce로 써봄

function firstReverse(str) {
  let arr = str.split('');
  let reverse = arr.reverse();
  let result = reverse.reduce((prev, cur) => prev + cur);
  return result;
}

06

function letterCapitalize(str) {
  if(!str) return '';
  let arr = str.split(' ');
  arr = arr.map(el => el = el[0].toUpperCase() + el.slice(1))
  return arr.join(' ');
}
function letterCapitalize(str) {
  if(!str) return '';
  let arr = str.split(' ');
  let result = [];
  arr = arr.map(el => {
    if(!el) {
      result.push(' ');
    } else {
      result.push(el[0].toUpperCase() + el.slice(1));
    }
  })
  return result.join(' ');
}

띄어쓰기 두번은 못잡는다... 어케했드라
아니 왜 문자가 아니면 split해줬을때 배열에 요소가 +1이 되는거지??
헉 저걸 기준으로 하니까 아무것도없는 사이 공간을 그냥 가른거구나...!!

console.log('---'.split('-'));
(4) ['', '', '', '']
undefined
console.log('hello-world'.split('-'))
(2) ['hello', 'world']
function letterCapitalize(str) {
  if(!str) return '';
  let arr = str.split('');
  let result = [];

  for(let i = 0; i < arr.length; i++){
    if(arr[i] === ' '){
      result.push(' ');
    } else if (arr[i -1] === ' ' && arr[i] !== ' ' || i === 0 && arr[i] !== ' '){
      result.push(arr[i].toUpperCase());
    } else {
      result.push(arr[i]);
    }
  }
  return result.join('');
}

레퍼런스를 봤는데 아주 간단한데... 하 전에도 머리를 탁 쳤던 기억이 남ㅋㅋ
string.substr();
기준점에서부터 뒤에까지 나열한다.
띄어쓰기 기준으로 split해준다음 arr[i][0]은 toUpperCase해주고 나머지는 substr으로 붙여주는거...
전에는 안그랬던 것 같은데 mdn에 들어가서 보니까 substr에 문제가 있다고 한다.

그래서 substr을 쓰지 않고 문제를 해결해보기로 하고

내 방식대로 다시 풀어보았다!!

function letterCapitalize(str) {
  if(!str) return '';
  let arr = str.split(' ');
  let result = [];
  arr = arr.map(el => {
    if(!el) {
      result.push('');
    } else {
      result.push(el[0].toUpperCase() + el.slice(1));
    }
  })
  return result.join(' ');
}

핵심은 빈배열일때 빈 배열을 고대로 넣어주는것.
띄어쓰기가 연속될때 빈 배열이 나왔었고, 이 빈 배열을 띄어쓰기로 치환해서 push하니까 띄어쓰기가 1개씩 더 추가가 되었었다. 밤에 졸린데 하니까 머리가 안돌아가서 지금 일어나서 다시 풀어봤는데 금방 풀림!!
그냥 빈 배열로 넣고 띄어쓰기로 합치도록 하니까 됨!! 굿굿

20

function compressString(str) {
  if(!str) return '';
  let arr = str.split('');
  let result = [];
  let temp = [arr[0]];
  
  for(let i = 1; i <= arr.length; i++){
    if(temp[0] === arr[i]){
      temp.push(arr[i]);
    } else {
      if(temp.length > 2) {
        result.push(temp.length + temp[0]);
      } else {
        result.push([temp.join('')]);
      }
      temp = [arr[i]];
    }
  }
  return result.join('');
}

str = 'wwwggopp'라고 가정.

  • if(temp[0] === arr[i]) //temp[0]과 같은 문자면 temp에 push한다.
    //temp.push(w) //temp.push(w) //temp.push(w)
  • else if(temp[0] !== arr[i]) //temp에 없는 문자 차례일때
    temp.length가 2보다 크면: result.push(temp.length + temp[0])
    temp.length가 2보다 작으면: result.push(temp)
    temp = [arr[i]] 로 초기화

i < arr.length로 하면 마지막 문자가 포함되지 않는다. i가 작거나 같을때까지 돌려야 온전히 출력이 됨!

profile
주니어 플러터 개발자의 고군분투기

0개의 댓글