SEB_FE_45(코드스테이츠)/section 2.

데일리코딩 ] 배열을 객체로 바꾸기

YTReeee 2023. 5. 17. 20:23

arr[ i ]

//배열은 대괄호 [] 안에 요소(값)이 있는 형태이다.
let arr = [1, 'two', true, function(){}, {key : value}, [1, 2, 3, 4]]
//위와 같이 배열 안에는 모든 타입의 데이터가 요소로 포함될 수 있다.
//배열은 왼쪽부터 오른쪽으로 순서를 갖는다. 이를 index라고 한다.
//배열의 인덱스는 0부터 시작한다.
//배열의 요소의 인덱스는 아래와 같이 조회한다.
arr[0] // -> 1
arr[1] // -> 'two'
arr[2] // -> true
arr[3] // -> function(){}
arr[4] // -> {key : value}
arr[5] // -> [1,2,3,4]

 

arr.length

//배열은 길이가 있다.
//배열의 길이는 .length 매서드를 이용해 검색할 수 있다.
let arr = [1, 'two', true, function(){}, {key : value}, [1, 2, 3, 4]]
console.log(arr.length) // -> 6
//요소의 순서(인덱스)와 1개의 차이가 항상 발생한다.
//이 때문에 배열을 순회하는 조건을 만들 때 아래와 같이 만든다.
for(let i = 0; i <= arr.length-1; i++){}
//arr.length -1은 해당 배열의 가장 마지막 요소를 가리킨다.

 

arr.slice()

//arr.slice(시작 인덱스, 끝 인덱스)은 배열 중 ()안에 넣은 조건에 맞게 요소를 얕은 복사하여 새로운 배열객체를 만든다.
let arr = [1,2,3,4,5]
arr.slice() // -> [1,2,3,4,5] 전체 복사
arr.slice(0) // -> [1,2,3,4,5] 전체 복사
arr.slice(1) // -> [2,3,4,5] // 1번째 요소부터 제외하고 복사
arr.slice(-1) // -> [5] // 마지막 요소만
arr.slice(2) // -> [3,4,5] // 2번째 요소부터 복사
arr.slice(0, 2) // -> [1, 2] // 0번 요소부터, 2번 요소 전까지 복사
arr.slice(0, -1) // -> [1,2,3,4] // 0번 요소부터, 마지막요소 전까지 복사
arr.slice(-1, arr.length 이상의 수) // -> [5] // 마지막요소만 복사
arr.slice(0, arr.length 이상의 수) // -> [1,2,3,4,5] // 전체복사

 

function transformFirstAndLast(arr) {
  //배열의 요소 중 첫 요소는 키, 마지막 요소는 값으로 하는 객체를 반환
  //입력받는 배열이 수정되면 안된다.
  //빈배열은 빈객체를 리턴한다.

  //요소를 담을 빈객체를 만든다.
  const obj = {};
  // 조건식을 이용해 빈 배열을 받지 않았을 때만, 작동하는 코드를 작성
  if(arr.length > 0) {
    let key = arr.slice(0, 1);
    let val = arr.slice(-1);
    //요소를 골라내려면 인덱스로 불러올수 있다. 첫번째 요소는 arr[0], 마지막 요소는 arr[arr.length -1]이 될것이다.
    //result에 해당 요소들을 객체의 키:값으로 할당한다.
    obj[key] = val.toString()
    }
  //result를 리턴한다.
  return obj
}

회고

arr.slice()를 이용해 이번 문제를 풀었다.

처음에는 빈배열인 경우, 빈객체를 반환하는 조건식만 만들고, 그 외에 작업은 함수 내부에서만 진행하게 코드를 작성했더니, 객체의 키에 원하는 데이터가 반영되지 않았다.

레퍼런스를 참조해보니, 전달받은 배열의 길이가 0이상(=빈배열이 아니다)일때, 배열의 요소의 인덱스를 이용하여, 객체를 만드는 방법으로 코드가 작성되어 있었다. 

이에 다른 방법을 찾다가, slice 기능을 사용해보기로 하고, 레퍼런스와 조금 다르게 코드를 작성해보았다.

알고리즘에 접근은 하는데 뭔가.. 한 5%정도 부족해 아쉽다. 공부가 좀 많이 필요해보인다...