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%정도 부족해 아쉽다. 공부가 좀 많이 필요해보인다...
'SEB_FE_45(코드스테이츠) > section 2.' 카테고리의 다른 글
야자라니..] Unit 4. React Intro 및 야간 자율학습 과제 (0) | 2023.05.18 |
---|---|
데일리코딩 ] 원금이 3배가 되는 시점 찾기 (0) | 2023.05.18 |
TIL] Unit 2. 객체지향프로그래밍(프로토타입과 클래스) (0) | 2023.05.11 |
TIL] Unit 2. 객체지향프로그래밍(캡슐화, 추상화, 상속 등) (0) | 2023.05.11 |
TIL] Unit 2. 객체지향프로그래밍(클래스와 인스턴스) (0) | 2023.05.11 |