배열 메소드

김종현·2023년 3월 9일
0

일일 공부

목록 보기
2/7

배열 메소드 구분하기

Array.prototype.~~

1.배열을 변경하지 않고 정보만 추출하는 메소드
let a = ['hello', 'world', 'foo', 'bar'];

find
console.log(a.find(value=>value.includes('f')));

index 찾기
a.indexOf

2.배열 자체를 변경하는 메소드 : 보통 변경 후 반환을 함.
console.log(a.push('elice')); -> a의 길이 반환 : 5/elice

a.pop() -> pop된 item 반환

const reversed = a.reverse(); -> 같은 array 반환: 메소드로 뒤집은 결과 a와 바뀌어진 a 보통 .map().filter()랑 같이 씀.

a.sort()

3.배열을 변경하지 않고 새로운 배열을 생성하는 메소드
a = [1, 2, 3, 4, 5];

.map();
const b = a.map(v=>v*2);
console.log(a,b); => [1, 2, 3, 4, 5], [2, 4, 6, 8, 10]
.filter();
const c = b.filter(v=>v<8);
console.log(a, b, c); => [1,2 ,3 ,4, 5], [2, 4, 6, 8, 10], [2, 4, 6]
.flat();
const items = [1,2,3 [4,5,6], [7, 8], 9];
console.log('itmes', items); => items, [1,2,3 [4,5,6], [7,8], 9]
console.log('flatted', items.flat()); => [1,2,3,4,5,6,7,8,9]

map, reduce, filter 쓰기

const a = [1, 2, 3, 4, 5];

//1. map
const b = a.map(v => v * 2);
console.log(b); => [ 2, 4, 6, 8, 10 ]

callback :
 arr.reduce(callback[, initialValue])
 배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받습니다.
 accumulator
누산기는 콜백의 반환값을 누적합니다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값입니다.

currentValue
처리할 현재 요소.

currentIndex Optional
처리할 현재 요소의 인덱스. initialValue를 제공한 경우 0, 아니면 1부터 시작합니다.

array Optional
reduce()를 호출한 배열.

initialValue Optional
callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용합니다. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류가 발생합니다.

//2. reduce 
두개씩 묶어서 반환해줌.
const c = a.reduce((previous, current) => previous + current);
이 경우엔 두개씩 묶어서 덧셈
(1, 2) => 3
3, [3,4,5], (3, 3) => 6
6, [4, 5], (6, 4) = > 10
10, [5], (10, 5) => 15
뱉어내는 값은 '반환 값 그 자체' 여기선 number 15.

let sum = 0;
for(const item of a){
sum += item;}

대부분의 경우 초기값을 넣어서 써줌.
const c = a.reduce( (state, value) => {return state + value;}, 100);
초기값을 넣어주면(여기선 100) state에 상태가 들어옴.
초기값이 state에 들어가고 반환값(return)을 다시 state에 계속 넣으면서 둘씩 짝지음
초기값이 배열 형태로도 들어가짐.

const c = a.reduce( (state, value) => {state.push(value *2); return state;},[]); 
이 부분은 위의 맵을 써서 배열 값을 2배로 만든 것과 같은 식임.

초기값을 안 넣을 경우 배열의 0, 1을 뜯어다가 state, value로 씀. 안 넣는 예외의 경우는 sum을 구현하는 것과 같이 입력하는 값이 동일한 type일 경우.(숫자는 숫자)

console.log(c);
// 30

const d = b.reduce((sum, v) => sum + v, 0);
console.log(d);
// 30

const e = b.reduce(function(sum, v) {
    return sum + v;
}, 0);
console.log(e);
// 30

/// =======================

const values = [...Array(11).keys()].slice(1);
// [1,2,3,4,5,6,7,8,9,10]

//3. filter
console.log(
    values.filter(value => value % 5 === 0)
); => [ 5, 10 ]

console.log(
    values.reduce((arr, v) => {
        if (v % 5 === 0) {
            arr.push(v);
        }

        return arr;
    }, [])
);
// [ 5, 10 ]

// 4. every
console.log(
    values.every(value => value % 2 === 0)
);
// false

console.log(
    values.reduce((pass, v) => {
        if (v % 2 !== 0) {
            return false;
        }

        return pass;
    }, true)
);
profile
나는 나의 섬이다.

0개의 댓글