배열 기초
1. 배열이란
- 순서가 있는 값
- 대괄호를 이용해 배열을 만들고, 각가의 element는 쉼표로 구분
- 순서 : 인덱스(index)
*0부터 번호를 매김
- 값 : 요소(element)
*index를 이용해 접근 가능
- 없는 인덱스 조회시 undefined
- 배열 안에 배열 중첩 가능
- console.table(arr) : 인덱스와 값을 테이블로 보여줌
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber[3];
myNumber[2] = 8
myNumber[10];
let myNumber = [
[1,2],
[3,4],
[5,6]
];
myNumber[1]
myNumber[1][0]
2. 배열의 반복
- i = 0 : index가 0부터 시작되기 때문
- i < myNumber.length : 배열의 길이까지만 반복하면 됨
let myNumber = [1, 2, 3, 4, 5, 6];
for(let n = 0; n < myNumber.length; n++){
console.log(myNumber[n]);
}
let myNum = [10, 20, 30,40]
let sum = 0
for (let i =0 ; i < myNum.length; i++){
sum = sum + myNum[i]
}
console.log(sum)
배열의 기초 메소드
1. arr.length
- 길이 알아내기
- 배열이 빈 배열인지 확인하려면 arr.length === 0
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber.length;
2. Array.isArray()
- 배열인지 아닌지 확인
- typeof 사용 시 object가 나와 객체인지 배열인지 알 수 없음
- true / false
let myNumber = [1, 2, 3, 4, 5, 6];
Array.isArray(myNumber);
3. arr.push() / arr.pop()
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber.push(7);
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber.pop();
4. arr.shift() / arr.unshift()
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber.shift();
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber.unshift(7);
5. arr.indexOf / arr.lastIndexOf
- 배열 요소 포함 여부 확인
- 첫번째 값만 반환하고 끝
let myNumber = [1, 2, 3, 4, 5, 1, 2];
myNumber.indexOf(2);
myNumber.indexOf(8);
myNumber.indexOf(2, 2);
myNumber.lastIndexOf(2);
myNumber.lastIndexOf(8);
6. arr.includes()
- 배열 요소 포함 여부를 불린형으로 확인
- Internet Explorer에서 사용 불가(에러 발생)
let myNumber = [1, 2, 3, 4, 5, 6];
myNumber.includes(3);
myNumber.includes(8);
7. arr.splice()
- 배열의 특정 요소를 지울 수 있음
- arr.splice(n, m) : n번째 요소부터 m개를 지워라
- arr.splice(n, m, x) : n번째 요소부터 m개를 지우고 x를 뒤에 추가
- mutable method : 원본 배열을 변경
- 삭제된 요소를 반환
let myNumber = [1, 2, 3, 4, 5];
myNumber.splice(1,2);
console.log(myNumber)
let myNumber = [1, 2, 3, 4, 5];
myNumber.splice(1,3,10,20);
console.log(myNumber)
let myArr = ['나는', '까까', '입니다'];
myArr.splice(1, 0, '검은', '고양이');
console.log(myArr)
8. arr.slice()
- arr.slice(n, m) : n번째 요소부터 m의 바로 앞까지 반환
- m번째 인덱스는 포함하지 않음
- m을 적지 않을 경우 배열 끝까지 반환
- n > m인 경우 []을 리턴
- 괄호 안에 아무것도 적지 않거나 0을 적으면 전체 배열이 새로운 주소로 복사됨
- arr의 길이와 같거나 큰 수 입력시 []을 리턴
- immutable method : 원본 배열을 수정하지 않음
let myNumber = [1, 2, 3, 4, 5];
myNumber.slice(1,4);
console.log(myNumber)
let myNumber2 = myNumber.slice()
let myNumber3 = myNumber.slice(0)
9. arr.concat()
- 합쳐서 새 배열 반환
- immutable method : 원본 배열을 수정하지 않음
let myNumber = [1, 2];
let myNumber2 = [3, 4, 5];
myNumber.concat([3, 4])
myNumber.concat([3, 4], [5, 6])
myNumber.concat([3, 4], 5, 6)
myNumber.concat(myNumber2)
console.log(myNumber);
10. arr.forEach(fn)
- 배열 반복
- 3개의 매개변수를 가진 함수를 인수로 받음
- 3개의 매개변수 : 해당 요소, 인덱스, 해당 배열 자체
*해당 요소 : somin, KKAKKA / 해당 배열 : users
- 보통 해당 요소, 인덱스만 사용
let users = ['somin', 'KKAKKA'];
users.forEach((name, index) => {
console.log(name)
console.log(`${index+1}. ${name}`)
});
11. arr.find(fn) / arr.findIndex(fn)
- 함수를 인자로 받아 포함 여부 확인
- 짝수 찾기, 성인 찾기 등이 가능
- arr.find(fn) : 첫번째 true값만 반환, 없으면 undefined 반환
- arr.findIndex(fn) : 해당 인덱스를 반환, 없으면 -1을 반환
let myNumber = [1, 2, 3, 4, 5];
const result = myNumber.find((num) => {
return num % 2 === 0;
});
console.log(result)
let userList = [
{name : 'somin', age : 26},
{name : 'daeseong', age : 30},
{name : 'KKAKKA', age : 7},
];
const result = userList.find((user) => {
if(user.age > 19){
return true;
}
return false;
});
console.log(result)
let userList = [
{name : 'somin', age : 26},
{name : 'daeseong', age : 30},
{name : 'KKAKKA', age : 7},
];
const result1 = userList.findIndex(user => user.age > 19);
console.log(result1)
const result2 = userList.findIndex(user => user.age < 19);
console.log(result2)
const result3 = userList.findIndex(user => user.age > 40);
console.log(result3)
12. arr.filter(fn)
let myNumber = [1, 2, 3, 4, 5];
const result = myNumber.filter((num) => {
return num % 2 === 0;
});
console.log(result)
let userList = [
{name : 'somin', age : 26},
{name : 'daeseong', age : 30},
{name : 'KKAKKA', age : 7},
];
const result = userList.filter((user) => {
if(user.age > 19){
return true;
}
return false;
});
console.log(result)
13. arr.reverse()
- 역순으로 재정렬
- 최근에 달린 댓글 순으로 보여주고자 할 때 사용
let myNumber = [5, 4, 3, 2, 1];
myNumber.reverse();
14. arr.map(fn)
- 함수를 받아 특정 기능을 시행하고 새로운 배열을 반환
- immutable method : 원본 배열을 수정하지 않음
let userList = [
{name : 'somin', age : 26},
{name : 'daeseong', age : 30},
{name : 'KKAKKA', age : 7},
];
let newUserList = userList.map((user, index) => {
return Object.assign({}, user, {
id : index + 1,
isAdult : user.age > 19,
});
});
console.log(newUserList)
console.log(userList)
15. arr.join()
- 배열의 요소들을 합쳐 문자열을 만들 때 사용
- 괄호 안에 아무것도 적지 않으면 쉼표로 구분되어 나옴
let myArr = ['나는', '까까', '입니다'];
let result = myArr.join(' ')
console.log(result);
16. arr.split()
- 문자열을 나눠서 배열로 만들어줌
- 괄호 안엔 어떤 것을 기준으로 나눌 지 정해줌
const users = 'somin,daeseong,KKAKKA';
const result = users.split(',')
console.log(result);
17. arr.sort()
- 배열 재정렬
- 정렬시 배열의 요소를 문자열로 취급
- 문자열도 알파벳 숫서대로 정렬
- 함수를 인수로 받음
*Lodash 라이브러리 활용하여 원하는 기준으로 정렬 가능
- mutable method : 원본 배열을 변경
let myNumber = [1, 3, 5, 2, 4];
myNumber.sort();
console.log(myNumber)
let myNumber = [3, 13, 5, 27, 4];
myNumber.sort();
console.log(myNumber)
let myNumber = [3, 13, 5, 27, 4];
function fn(a, b){
return a - b;
}
myNumber.sort(fn);
console.log(myNumber)
let myNumber = [3, 13, 5, 27, 4];
myNumber.sort((a,b) => a - b)
console.log(myNumber)
18. arr.reduce()
- 함수를 인수로 받음
- 배열을 순환하며 원하는 작업을 한 후 하나의 결과값 반환
- arr.reduceRight() : 배열 우측부터 연산을 수행
let arr = [1, 2, 3, 4, 5];
let result = 0;
arr.forEach((num) => {
result += num;
});
console.log(result);
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((prev, cur) => {
return prev + cur;
}, 0);
console.log(result);
let userList = [
{name : 'somin', age : 26},
{name : 'daeseong', age : 30},
{name : 'KKAKKA', age : 7},
];
let result = userList.reduce((prev, cur) => {
if(cur.age > 19){
prev.push(cur.name)
}
return prev
}, [])
console.log(result);
References
1. mutator method
2. 배열 메소드1
3. 배열 메소드2