솔미는 성장중
[JS] 표준 내장 객체 : 배열 본문
length
배열의 길이(숫자) = 아이템 개수를 반환
console.log(arr.length)
.at()
대상 배열을 인덱싱한다.
음수 값을 사용하면 뒤에서부터 인덱싱.
✨ 예시) 마지막 아이템 인덱싱 : .at()을 쓰면 훨씬 간결하다!
const arr = ['A','B','C']
console.log(arr[arr.length-1]) //C
console.log(arr.at(-1)) //C
.concat()
대상 배열과 주어진 배열을 병합해 새로운 배열을 반환
concat을 사용하면 numbers의 [ ]가 벗겨져서 letters로 들어간다.
const letters = ["a", "b", "c"];
const numbers = [1, 2, 3];
const alphaNumeric = letters.concat(numbers);
console.log(alphaNumeric);
// results in ['a', 'b', 'c', 1, 2, 3]
//전개 연산자를 통해서도 동일한 결과가 나오게 할 수 있다.
const alphaNumeric2 = [...letters, ...numbers]
console.log(alphaNumeric2);
// results in ['a', 'b', 'c', 1, 2, 3]
.every()
대상 배열의 모든 요소가 콜백 테스트에서 참을 반환하는지 확인
const arr = [1,2,3,4]
const isValid = arr.every(item => item <5) //every 메소드 안에 인수로 함수(콜백)를 추가
console.log(isValid) //true. 하나라도 거짓이면 false가 된다.
.some()
대상 배열의 어떤 요소라도 콜백 테스트를 통과하는지 확인
const arr = [1,2,3,4]
const isValid = arr.some(item => item >3)
console.log(isValid) //true. 하나라도 참이면 true
.filter()
주어진 콜백 테스트를 통과하는 모든 요소(참인 요소)를 새로운 배열로 반환한다.
모든 요소가 테스트를 통과하지 못하면 빈 배열을 반환한다.
//1번째 예시
const numbaers = [1,2,3,4,50,51,52]
const filteredNumbers = numbers.filter(number => number <20)
console.log(filteredNumbers) //[1,2,3,4]
const filteredNumbers2 = numbers.filter(number => number <0)
console.log(filteredNumbers2) //[]
//2번째 예시
const users = [
{name: 'A', age:15}
{name: 'B', age:22}
{name: 'C', age:35}
]
const adults = users.filter(user => user.age >= 19) //user라는 매개변수로 객체데이터를 받고 객체 데이터 내 age속성을 찾음
console.log(adults) //[{name: 'B', age:22}, {name: 'C', age:35}]
//3번째 예시
const my_string = "apporoograpemmemprs"
const indices = [1, 16, 6, 15, 0, 10, 11, 3]
function solution(my_string, indices) {
const arr = [...my_string]
const result = arr.filter((item, index) => {
return !indices.includes(index)
})
return result.join("") //programmers
}
.find()
대상 배열에서 콜백 테스트를 통과하는 첫 번째 요소 반환
(콜백은 순차적으로 배열의 아이템 개수에 따라 반복 실행하지만,
반환하고 나면 뒤쪽에 있는 다른 아이템들에 대한 콜백은 동작하지 않음.)
const arr = [5,1,30,55,3]
const foundItem = arr.find(item => item>10)
console.log(foundItem)//30
const objects = [
{name:'A', color:'blue'},
{name:'B', color:'yellow'},
{name:'C', color:'red'}
]
const foundObject = objects.find(object => object.color==='yellow')
console.log(foundObject) //{name: 'B', color: 'yellow'}
const fruits = ['Apple','Banana','Peach']
const a = fruits.find(item => {
return /^B/.test(fruit)
}) //B로 시작(^)하는 요소를 찾아라
console.log(a) //Banana
.findIndex()
대상 배열에서 콜백 테스트를 통과하는 첫 번째 요소의 인덱스 반환
반환하고 나면 뒤쪽에 있는 다른 아이템들에 대한 콜백은 동작하지 않음.
const arr = [5,1,30,55,3]
const foundItemIndex = arr.findIndex(item => item>10)
console.log(foundItemIndex)//2
.flat()
대상 배열의 모든 하위 배열을 지정한 깊이(Depth)까지 이어붙인 새로운 배열을 생성
const arr = [a,[b,c,[d,e]]]
console.log(arr.flat()) //[a,b,c,[d,e]]
console.log(arr.flat(2)) //[a,b,c,d,e]
console.log(arr.flat(Infinity)) //[a,b,c,d,e] 하위 배열 개수 상관하지 않고 모두 풀어줌
.forEach()
대상 배열의 길이만큼 주어진 콜백을 실행
const arr = ['A','B','C']
arr.forEach(item => console.log(item))
//A
//B
//C
위 예시에선 아이템 개수가 3개이기 때문에 콜백이 3번 실행됨.
도중에 반복 중단 불가!
다른예시)
const numbers = [1,2,3,4]
const fruits = ['Apple','Banana','Peach']
fruits.forEach(function (element, index, array) {
console.log(element,index,array)
})
//Apple 0 ['Apple','Banana','Peach']
//Banana 1 ['Apple','Banana','Peach']
//Peach 2 ['Apple','Banana','Peach']
(보통 array 매개변수는 잘 안씀)
내가 자주썼던 for 반복문을 통하 아이템 출력(아래)과 동일한 효과인데 위쪽 코드가 훨씬 효율적!
for반복문에 특이점은 도중에 반복 중단 가능! (ex. if문과 break 활용)
for(let i=0; i<arr.length; i+=1) {
console.log(arr[i])
}
//A
//B
//C
.includes()
대상 배열이 특정 요소를 포함하고 있는지 확인 -> 불린 반환
//숫자를 담은 배열
const arr = [1,2,3]
console.log(arr.includes(2)) //false
//문자열을 담은 배열
const colors = ['red', 'green','blue']
console.log(colors.includes('red')) true
console.log(colors.includes('Green')) //false. 대소문자
//객체 데이터를 담은 배열(다시보기!)
const users = {
{name: 'A', age: 12},
{name: 'B', age: 66},
{name: 'C', age: 36}
}
console.log(users.includes({name: 'B', age: 66})) //false. 단순히 모양이 같은걸 찾는게 아님
//메모리 주소가 달라서 false.
const test = users[1]
console.log(users.includes(test)) //true 메모리주소를 통해 판단하는 것임.
.join()
대상 배열의 모든 요소를 구분자로 연결한 문자를 반환
const arr = ['Apple', 'Banana', 'Peach']
console.log(arr.join()) //Apple,Banana,Cherry 아무것도 안쓰면 ','와 동일.
console.log(arr.join(', ')) //Apple, Banana, Cherry
console.log(arr.join('/')) //Apple/Banana/Cherry
.map()
대상 배열의 길이만큼 주어진 콜백을 실행하고, 콜백의 반환값을 모아 새로운 배열을 반환
const numbers = [1,2,3,4]
const newNumbers = numbers.map(item=> item*3)
console.log(newNumbers) //3,6,9,12
const users = {
{name: 'A', age: 12},
{name: 'B', age: 66},
{name: 'C', age: 36}
}
const new Users = users.map(user => {
return {
...user, //전개연산자는 리터럴기호를 날려버리기 때문에 7번줄을 예시로 들면 name: 'A', age:12 를 넣은 것과 동일
isValid: true,
email: null
}
})
console.log(newUsers)
//{name:'A', age:12, isValid:true, email:null}
//{name: 'B', age: 66, isValid:true, email:null}
//{name: 'C', age: 36, isValid:true, email:null}
cf) 콜백함수에서 {return }을 생략하고 싶다면 아래와 같이 쓰면 된다.
화살표 함수에서의 { }인지, 객체 데이터의 { }인지 구분할 수 없으니 ( )로 감싸주어야한다.
const new Users = users.map(user => ({
...Users,
isValid: true,
email: null
})
)
.shift()
대상 배열의 첫 번째 요소를 제거하고, 제거된 요소를 반환.
대상 배열 원본이 변경됨!!!
const arr = ['Apple', 'Banana', 'Peach']
console.log(arr.shift()) //Apple
console.log(arr)//['Banana', 'Peach']
.unshift()
(push와 반대된다! : push는 뒤에! unshift는 앞에!)
대상 배열의 첫 번째 요소를 추가하고, 새로운 배열의 길이를 반환.
대상 배열 원본이 변경됨!!!
const arr = ['Apple', 'Banana', 'Peach']
console.log(arr.shift('X')) //4
console.log(arr)//['X', 'Apple', 'Banana', 'Peach']
.pop()
대상 배열에서 마지막 요소를 제거하고 제거한 요소를 반환
대상 배열 원본이 변경됨!!!
const arr = ['Apple', 'Banana', 'Peach']
console.log(arr.pop()) //Peach
console.log(arr)//['Apple', 'Banana']
.push()
대상 배열의 마지막에 하나 이상의 요소를 추가하고, 배열의 새로운 길이(개수)를 반환
대상 배열 원본이 변경됨!!!
const arr = ['Apple', 'Banana', 'Peach']
const newArr = arr.push('Cherry') //여러 개 한번에 push도 가능.
console.log(newArr) // 4
console.log(arr)//['Apple', 'Banana', 'Peach', 'Cherry']
.reduce()
대상 배열의 길이만큼 주어진 콜백을 실행하고, 마지막에 호출되는 콜백의 반환값을 반환
각 콜백의 반환값은 다음 콜백으로 전달
기본적으로 2개의 인수를 받는다
1번 예시) 숫자 데이터를 가진 배열
const numbers = [1,2,3,4]
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue
}, 0)
console.log(sum) //10
0 : 초깃값.
accumulator : 초깃값이 처음에 이곳으로 들어온다.
currentValue : 최초실행 시, 배열의 1번째 데이터가 들어온다.
콜백함수: 더하기를 실행
accumulator: 콜백의 반환값인 1
currentValue: 배열의 2번째 데이터가 들어온다.
...(반복)
최종적으로 10을 반환.
2번 예시) 객체 데이터를 가진 배열
const users = [
{name: 'A', age:23},
{name: 'B', age:75},
{name: 'C', age:12}
]
//총 나이 계산
const sumAge = users.reduce((acc, cur) => acc+cur.age ,0)
console.log(sumAge) //110
//모든 이름 추출
const allName = users.reduce((acc,cur) =>{
acc.push(cur.name)
return acc
} ,[])
console.log(allName) //['A', 'B', 'C']
const names = namesArray.join(', ')
console.log(names) //A, B, C
cf) 모든 이름 추출 코드 짧게 줄이기 (feat.메소드 체이닝)
const names = users.reduce((acc,cur) =>{
acc.push(cur.name)
return acc
} ,[]).join(', ')
console.log(names)
.reverse()
대상 배열의 순서를 반전시킴.
대상 배열 원본이 변경됨!!!
const arr = ['Apple', 'Banana', 'Peach']
console.log(arr.reverse())//['Peach', 'Banana', 'Apple']
.slice()
대상 배열의 일부를 추출해 새로운 배열을 반환
두 번째 인수 직전까지 추출하고, 두 번째 인수를 생략하면 대상 배열의 끝까지 추출
const arr = ['A','B','C','D','E','F']
console.log(arr.slice(0,3)) //['A','B','C']
console.log(arr.slice(3,-1)) // ['D','E']
console.log(arr.slice(3)) //['D','E','F']
.sort()
대상 배열의 콜백의 반환 값 (음수, 0, 양수)에 따라 정렬
콜백을 제공하지 않으면, 요소를 문자열로 변환하고 유니코드 코드 포인트 순서로 정렬한다.
대상 배열 원본이 변경됨!!!
(원본을 그대로 유지하고 싶으면 toSorted를 사용하자
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted )
이 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬하고,
이 함수가 리턴하는 값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬합니다.
const numbers = [3,88,1,28,501,210]
numbers.sort()
console.log(numbers) // [1, 210, 28, 3, 501, 88]
numbers.sort((a,b) => a-b)
console.log(numbers) //[1, 3, 28, 88, 210, 501] <- 오름차순
//a-b값이 음수면 a<b로 판단해서 a.b순으로 정렬
numbers.sort((a,b) => b-a)
console.log(numbers) // [501, 210, 88, 28, 3, 1] <- 내림차순
//(3,88)로 들어오는데 콜백 내에서 88-3>0 이다. 이는 a(3)가 b(88)보다 더 크다고 판단하게 만든다.
.splice()
대상 배열의 요소를 추가/삭제/교체
대상 배열 원본이 변경됨!!!
//배열명.splice(변경하고자 하는 자리 인덱스, 삭제하고자 하는 개수, 추가할 것(여러개 써도 됨))
const arr = ['A','B','C']
//추가
arr.splice(2, 0, 'X')
console.log(arr) //['A','B','X','C']
//삭제
arr.splice(1,2)
console.log(arr) //['A','C']
//교체
arr.splice(1,1,'X')
console.log(arr) //['A','X']
.charAt()
문자열에서 특정 인덱스에 위치하는 유니코드 단일문자를 반환
index가 문자열 길이를 벗어나면 빈 문자열을 반환
index를 제공하지 않으면 기본값은 0
const anyString = "Brave new world";
console.log("The character at index 0 is '" + anyString.charAt() + "'");
// No index was provided, used 0 as default
console.log("The character at index 0 is '" + anyString.charAt(0) + "'"); //'B'
console.log("The character at index 999 is '" + anyString.charAt(999) + "'");; //''
.Array.from()
유사 배열(Array-like)을 실제 배열로 반환
조건)
1. 각각의 속성이 숫자 0부터 1씩 증가할 수 있는 구조 (숫자 형태의 indexing 가능.)
: 0부터 시작하면 모든 속성값이 다 배열로 잘 반환되지만 1이상의 숫자부터 시작하면 undefined뜨는 값이 생김
2. length 속성을 통해 아이템 개수에 해당하는 숫자가 입력되어있어야 함.
✨ 유사배열이란? (Array-Like Object)
: 배열처럼 보이지만 사실 key가 숫자이고 length 값을 가지고 있는 객체
[ 유사배열은 어떤 때에 사용하는가? ]
: 함수에서 처리 결과로 배열을 반환하고 싶을때
: Array에서 기본으로 내포되어 있는 기능을 제공하고 싶지 않을 때
: Array에 내포되어 있지 않은 기능을 제공하고 싶을 때
[더 자세히 알고 싶다면]
https://yuna99.tistory.com/19
const arrayLike = {
0: 'A',
1: 'B',
2: 'C',
length: 3
}
console.log(arrayLike.constructor === Array) //false
console.log(Array.isArray(arrayLike)) //false 위 코드와 동일한 내용
console.log(arrayLike.constructor === Object) //true 즉, 객체이다!
//arraylike.forEach(item => console.log(item)) //에러
Array.from(arraylike).forEach(item => console.log(item))
//A
//B
//C
.Array.isArray()
배열 데이터인지 확인
(위 예시 8번째줄을 확인하자)
cf) 불변성을 지켜주려면 새 배열을 반환하는 메소드를 사용하자!
'JavaScript > 표준 내장 객체' 카테고리의 다른 글
[JS] JSON (0) | 2023.07.23 |
---|---|
[JS] 표준 내장 객체 : 객체 (0) | 2023.07.23 |
[JS] 표준 내장 객체 : 날짜 (0) | 2023.07.20 |
[JS] 표준 내장 객체 : 수학 (0) | 2023.07.20 |
[JS] 표준 내장 객체 : 숫자 (0) | 2023.07.20 |