대괄호를 이용하여 선언, 할당할 수 있다. 인덱스를 이용하여 조회할 수 있고 변경할 수도 있다. 온점 . dot 을 이용하여 속성변수가 가지고 있는 속성 property 에 접근할 수 있으며, () 소괄호를 이용하여 명령 method도 실행할 수 있다.
let arr = [1,2,3]; // 선언 및 할당
arr.length; // 접근
arr.pop(); // 명령
let arr = [1,2,3];
console.log(arr[0]); //1
console.log(arr[1]); //2
console.log(arr[2]); //3
console.log(arr[3]); //undefined
for(let i = 0 ; i < arr.length ; i++){
console.log(arr[i]);
}
요소 element 들을 조회하고 싶을 때는 인덱스 0 부터 arr.length-1 까지 조회가능하다. for 반복문을 이용하여 조회할 수도 있다.
다만, arr.length를 벗어난 인덱스를 조회하면 undefined 이다.
앞선 강의에서는 typeof
를 이용하여 string, number, boolean 을 판별하였다. array 또한 typeof
를 이용하면 array가 아닌 object 로 판별된다.
따라서, 배열로 판별하기 위해서는 Array.isArray(array)
메소드를 이용한다. 배열일 경우에는 true를, 아닐 경우에는 false를 반환한다.
typeof "문자열";//string
typeof 123;//number
typeof true;//boolean
typeof [1,2,3];//object
Array.isArray([1,2,3]); //true
Array.isArray("문자열"); //false
배열에서는 값을 추가 및 삭제 가능하며, 위치에 따라서 사용해야 할 메소드가 달라진다.
1. 뒤에서 추가 : push
2. 뒤에서 삭제 : pop
3. 앞에서 추가 : unshift
4. 앞에서 삭제 : shift
let arr = [1,2,3];
arr.push(0); //4 (arr.length 로 반환)
console.log(arr); //[1,2,3,0] 뒤에서 0이 추가됨
arr.pop() ;//0 (삭제된 요소로 반환)
console.log(arr); // [1,2,3] 뒤에서 0이 삭제됨
arr.unshift(5); // 4 (arr.length 로 반환)
console.log(arr); // [5,1,2,3] 앞에서 5가 추가됨
arr.shift(); //5 (삭제된 요소로 반환)
console.log(arr); // [1,2,3] 앞에서 5가 삭제됨
배열은 특정 값이 배열에 포함이 되어있는지 확인할 수 있다.
indexOf()
는 주어진 값과 일치하는 첫 번째 인덱스(여러 개가 있다면 그 중 첫 번째)를 반환한다. 만약 존재하지 않는다면 -1 을 반환한다.
let arr = [1,2,3,1];
arr.indexOf(2); // 1
arr.indexOf(1); // 0
arr.indexOf(5); // -1
includes()
는 주어진 값이 배열에 포함이 된다면 true 를, 포함되지 않는다면 false 를 반환한다.
let arr = ['code', 'states']
arr.includes('states'); //true
arr.includes('frontEnd'); //false
다만, includes()
메소드는 값의 존재 여부만 판단하고 Internet Explorer 에서는 호환이 되지 않기 때문에, 존재 여부와 인덱스값까지 판단할 수 있고 호환성이 좋은 indexOf()
메소드를 추천한다.
split(seperaotr, limit)
let string = 'abcd';
string.split();//'abcd'
string.split('');//['a','b','c','d']
let str = "abc defgh ijklm"
string.split('');//빈 문자열 - ['a', 'b', 'c', ' ', 'd', 'e', 'f', 'g', 'h', ' ', 'i', 'j', 'k', 'l', 'm'] 공백도 포함
string.split(' ');//뛰어쓰기 - ['abc', 'defgh', 'ijklm']
...
전개구문 Spread Synstaxsplit()
과 비슷. apply()
로 대체가능함. let string = "grass"
console.log([...string]); // ['g', 'r', 'a', 's', 's'] 각각의 문자를 분리하여 배열로 만들어줌
sort()
sort([1,30,4,21,10000]); // [1, 10000, 21, 30, 4] 유니코드 기준
let numbers = [4,2,5,1,3];
numbers.sort(function(a,b){ //compareFunction 을 이용하여 오름차순으로 정렬된 정렬 반환
if(a > b) return 1;
if(a === b) return 0;
if(a < b ) return -1;
});
numbers.sort(function(a,b) {// 단순화
return a-b;
});
console.log(numbers);//[1,2,3,4,5]
slice([,begin[,end]])
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
animals.slice(2); //['camel', 'duck', 'elephant'] 인덱스 2부터 배열의 끝까지
animals.slice(2,4); //['camel', 'duck'] 인덱스 2부터 3까지
animals.slice(1,5); //['bison','camel', 'duck', 'elephant'] 인덱스 1부터 배열의 길이보다 큰 5이면 배열의 끝까지
animals.slice(-2); //['duck', 'elephant'] 음수 인덱스인 경우 배열의 끝에서부터 두번째까지 (길이가 2)
animals.slice(2,-1); //['camel', 'duck'] 인덱스 2부터 음수 인덱스인 경우 배열의 끝에서 길이 다음부터 (즉, 마지막 하나 빼고 그 앞 인덱스 까지) **
animals.slice();//['ant', 'bison', 'camel', 'duck', 'elephant'];
splice(start[, deleteCount[, item1[, item2[, ...]]]])
let months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// ['Jan','Feb', 'March', 'April', 'June']인덱스 1에 삭제하지 않고 새로운 요소 'Feb' 추가
months.splice(4, 1, 'May');
// 인덱스 4에서 1개 요소 'June' 를 지우고 새로운 요소 'May' 추가 ['Jan', 'Feb', 'March', 'April', 'May']
join([seperator])
const arr = ['바람', '비', '불']
arr.join(); //'바람,비,연결' 생략시 쉼표로 구분
arr.join(', '); //'바람, 비, 연결' ', ' 로 구분
arr.join(''); //바람비연결 빈문자열일 경우 아무문자 없이 연결
concat(value1[, value2[, ...[,valueN]]]])
const arr1 = ['a','b','c'];
const arr2 = ['d','e','f'];
const arr3 = arr1.concat(arr2);
console.log(arr3); //['a','b','c','d','e','f] 새로운 배열
console.log(arr1); //['a','b','c']; 기존 배열은 불변
console.log(arr2); //['d','e','f']; "
fill(value[,start[,end)
const arr = [1,2,3,4];
arr.fill(0,2,4); //[1,2,0,0] 0을 인덱스 2부터 4이전까지(2,3) 채움
arr.fill(5,1); //[1,5,5,5] 5를 인덱스 1부터 길이끝까지 채움
arr.fill(6); //[6,6,6,6] 6을 길이끝까지 채움
const arr = []
arr.fill(5); //[] 크기 지정x
arr = new Array(3).fill(5);//[5,5,5] new Array(n) n만큼 크기를 지정한 배열에 5를 채움
filter(callback(element[,index[, arry]])[, thisArg])
map()
과 유사하나 filter()
는 if
문과 유사하며 콜백의 리턴값이 true인 요소만 가지고 새로운 배열을 만듦filter
를 호출할 배열 let numbers = [12,5,8,130,44];
let filtered = numbers.filter((ele) => value >= 10);
//배열의 값이 10이하인 값만 filtered에 할당
console.log(fitered);//[12,130,44]
console.log(numbers);//[12,5,8,130,44] 기존의 배열은 바뀌지 않음
let numbers = [1,2,3,4,5];
let filtered = numbers.filter( (el, ind) => ind % 2 == 0);
// 인덱스가 짝수인 경우만 fitered에 할당
// 암묵적으로 <(el) 요소 / (el, ind) 요소, 인덱스>를 가리킴
console.log(filtered); //[1,3,5]
map(callback(currentValue[,index[, arry]])[, thisArg])
filter()
와 굉장히 유사하나 콜백의 산술 연산값을 가지고 새로운 배열 요소를 생성하는 콜백 let numbers = [1,2,3,4,5];
let mapping = numbers.map( el => el * 2);
//배열의 각 요소들의 2배인 값으로 구성된 배열
console.log(numbers); //[1,2,3,4,5] 기존의 배열은 바뀌지 않음
console.log(mapping); //[2,4,6,8,10]
reduce(callback[,, initialValue)
[0,1,2,3,4].reduce(function(accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
});
//function 완전한 함수 대신에 화살표 함수로 제공 가능
//[0,1,2,3,4].reduce((prev, curr) => prev+curr);
callback | accumulator | cuurentValue | cuurentIndex | array | 반환값 |
---|---|---|---|---|---|
1번째 호출 | 0 | 1 | 1 | [0,1,2,3,4] | 1 |
2번째 호출 | 1 | 2 | 2 | [0,1,2,3,4] | 3 |
3번째 호출 | 3 | 3 | 3 | [0,1,2,3,4] | 6 |
4번째 호출 | 6 | 4 | 4 | [0,1,2,3,4] | 10 |
4번의 콜백 => initialValue 를 지정하지 않아서 currentValue는 두번째 값부터, currentIndex를 1부터 시작
[0,1,2,3,4].reduce(function(accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
}, 10);
//function 완전한 함수 대신에 화살표 함수로 제공 가능
//[0,1,2,3,4].reduce((prev, curr) => prev+curr,10);
callback | accumulator | cuurentValue | cuurentIndex | array | 반환값 |
---|---|---|---|---|---|
1번째 호출 | 10 | 0 | 0 | [0,1,2,3,4] | 10 |
2번째 호출 | 10 | 1 | 1 | [0,1,2,3,4] | 11 |
3번째 호출 | 11 | 2 | 2 | [0,1,2,3,4] | 13 |
4번째 호출 | 13 | 3 | 3 | [0,1,2,3,4] | 16 |
5번째 호출 | 16 | 4 | 4 | [0,1,2,3,4] | 20 |
5번의 콜백 => initialValue를 지정해서 currentValue와 curretIndex를 초기값부터 시작
let arr = [1,2,3,4,5];
let result = arr.reduce( ( acc, cur ) => {return acc += cur; }, 0};
console.log(result); //15
initialValue 를 0으로 설정하여 배열의 초기값부터 살펴 누적값을 이용하여 결과값 반환
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let result = arr.sort().reduce( (acc, cur) => {
const length = acc.length
if(length === 0 || acc[length-1] !== cur){
acc.push(cur);
}
return acc;
},[]);
console.log(result); // [1,2,3,4,5]
arr를 정렬을 시킨 후,
initialValue를 빈 배열로 설정시킨 후 callback을 실시한다.
콜백에는 초기값일 경우(length === 0)와 누적기의 최근값이 cur가 아닐 때 (즉, 이미 누적기에 넣은 값이 아닐 경우에) 누적기에 추가하여 배열의 마지막 인덱스까지 순회하고 난 후의 결과값을 반환한다.
reverse()
const a = [1,2,3];
console.log(a); // [1,2,3]
a.reverse();
console.log(a); // [3,2,1]
filter메서드 이용
7. function getAllLetters(str) { //문자열을 입력받아 문자열을 구성하는 각 문자를 요소로 갖는 배열을 리턴 let arr = []; // for(let i = 0 ; i < str.length ; i++){ // arr.push(str[i]); // } [...str].map(ele => arr.push(ele)); //str을 각각 배열로 만들어 각 요소들을 빈 배열 arr 에 추가시켜줌 return arr; }
9. function getLongestWord(str) { // 문자열을 입력받아 문자열에서 가장 긴 단어를 리턴 //가장 긴 단어가 2개 이상이면 첫번째로 등장하는 단어를 리턴 let arr = str.split(' '); //sort 메서드 이용 arr.sort(function(a,b){ return b.length - a.length; });//arr.sort( (a,b) => b.length - a.length ); return arr[0]; // map과 filter 이용 let len = arr.map(e => e.length); //arr 배열 요소들을 길이요소들로 변화시켜 map 메서드를 이용하여 새로운 배열을 만듦 let max = Math.max(...len); //len 배열 요소들을 가지고 가장 큰 값을 갖는 길이를 찾음 return arr.fiter(ele => ele.length === max)[0]; //공백을 기준으로 구분한 arr 배열에서 요소의 길이가 max와 같은 요소들의 집합에서 첫번째 값 리턴(같은 max 값을 가질 때 앞 순서가 우선순위이기 때문) }
10. function getEvenNumbers(arr) { //수를 요소로 갖는 배열을 입력받아 짝수만을 요소로 갖는 배열을 리턴 return arr.filter( ele => ele % 2 === 0); }
15. function getElementsUpTo(arr, n) { if(n >= arr.length) return []; // return arr.slice(0,n); return arr.filter((e, i) => i < n); //filter 메서드 ( 요소, 인덱스 ) 이용 } //배열과 인덱스를 입력받아 주어진 인덱스 이전의 요소들을 갖는 새로운 배열을 리턴