[DAY - 27] at, splice, filter, find, findIndex, map, forEach, reduce, flat, every, some

2023. 4. 10. 19:47·🔥 부트캠프-웹 개발 🔥/JavaScript
  • at
  • splice
  • filter
  • find, findIndex
  • map
  • forEach
  • reduce
  • flat
  • every
  • some

 

 

1) at

 

at 메서드는 배열을 뒤에서부터 부를 때 사용한다.

 

let arr=[10, 20, 30, 40];
console.log(arr[arr.length-1]);
console.log(arr[2]);
console.log(arr.at(-1));
// at : 뒤에서 부터 인덱스 카운트
console.log(arr.at(-2));
console.log(arr.at(2));

console.log(arr[-2]);
// 인덱스 번호로 부를땐 음수 불가능



40
30
40
30
30
undefined

 

첫 번째 console.log는 arr배열의 맨 마지막 요소를 length를 사용해 출력했고, 세 번째는 at을 사용해서 뒤에서부터 인덱스 번로를 카운트 한 뒤 출력했다.

 

at을 사용하지 않을 시 인덱스 번호는 0, 1, 2, 3...처럼 0부터 시작하는 양수이므로 음수를 넣으면 출력되지 않는다.

 

 

 

2) splice

 

 특정 위치의 요소를 삭제 또는 교체하거나, 새 요소를 추가할 때 사용한다.

.splice(시작 인덱스 번호, 삭제할 요소 수)

.splice(시작 인덱스 번호, 삭제할 요소 수, 추가할 요소)

 

let arr1 = [10, 20, 30, 40, 50, 60];
arr1.splice(2, 0, 'a');
console.log(arr1);

let arr2 = [10, 20, 30, 40, 50, 60];
arr2.splice(0, 3);
console.log(arr2);

let arr3 = [10, 20, 30, 40, 50, 60];
arr3.splice(1, 0, 'a','b','c');
console.log(arr3);

let arr4 = [10, 20, 30, 40, 50, 60];
arr4.splice(2, 3, 'a','b','c');
console.log(arr4);



[
  10, 20, 'a', 30,
  40, 50, 60
]
[ 40, 50, 60 ]
[
  10, 'a', 'b', 'c',
  20, 30,  40,  50,
  60
]
[ 10, 20, 'a', 'b', 'c', 60 ]

 

arr1은 2번 인덱스에서 요소를 삭제하지 않고 'a'를 추가했고, arr2는 0번 인덱스부터 요소 3개를 삭제해 40, 50, 60만 남았다.

 

 

3) filter 조건문 단축

 

let arr = [10, 20, 30, 40, 50, 60];

let result2 = arr.filter(function(a){
    if(a>30){
        return true;
    } else {
        return false;
    }
});
console.log(result2);

let result3 = arr.filter(function(b){
    return b >30
});
console.log(result3);

let result4 = arr.filter(b=> b >30);
console.log(result4);



[ 40, 50, 60 ]
[ 40, 50, 60 ]
[ 40, 50, 60 ]

 

result2에서 if문을 생략하면 result3가 되고 화살표함수로 바꾸면 result4가 된다.

 

 

 

4) find, findIndex

 

filter 메서드와 비슷하지만 filter는 반환값이 배열 [ ] 인 반면 find는 반환값이 { } 하나이다.

findIndex는 find에서 반환값이 index번호가 된다.

 

let arr = [10, 20, 30, 40, 50];

let a1 = arr.filter(x=>x>=30);
let a2 = arr.find(x=>x>=30);
let a3 = arr.findIndex(x=>x>=30);

console.log(a1);
console.log(a2);
console.log(a3);



[ 30, 40, 50 ]
30
2
let data = [
    {id : 1, name : '유재석', age : 20, addr : '서울'},
    {id : 2, name : '정준하', age : 30, addr : '수원'},
    {id : 3, name : '정형돈', age : 30, addr : '수원'},
    {id : 4, name : '하하', age : 10, addr : '서울'},
    {id : 5, name : '노홍철', age : 10, addr : '서울'},
    {id : 6, name : '길', age : 40, addr : '인천'}
]
// id가 3인 사람 [{}] 출력
let data1 = data.filter(a=>a.id===3);
console.log(data1);
// id가 3인 사람 {} 출력
let data2 = data.find(a=>a.id===3);
console.log(data2);
// id가 3인 사람 인덱스 번호 출력
let data3 = data.findIndex(a=>a.id===3);
console.log(data3);



[ { id: 3, name: '정형돈', age: 30, addr: '수원' } ]
{ id: 3, name: '정형돈', age: 30, addr: '수원' }
2

 

 

5) map

 

map 메서드도 filter와 비슷하다.

map은 slice, concat처럼  복제본을 만들기 때문에 원본이 바뀌지 않는다.

 

let arr = [10, 20, 30, 40, 50];
let arr1 = arr.map(function(x, y){
    console.log(x, y);
    return x;
})
console.log(arr1);

console.log(`-----------------------`)

let arr2 = arr.map(function(a, b){
    console.log(a, b);
    return b;
})
console.log(arr2);



10 0
20 1
30 2
40 3
50 4
[ 10, 20, 30, 40, 50 ]
-----------------------
10 0
20 1
30 2
40 3
50 4
[ 0, 1, 2, 3, 4 ]

 

위 코드에서 x와 a는 arr의 요소값인 10, 20, 30... 을 의미하고 y와 b는 인덱스 번호인 0, 1, 2... 를 의미한다.

따라서 return으로 x를 받은 arr1은 값이 배열로 반환되었고 b를 받은 arr2는 인덱스 번호가 배열로 반환되었다.

 

'use strict';

let data = [
    {id : 1, name : '유재석', age : 20, addr : '서울'},
    {id : 2, name : '정준하', age : 30, addr : '수원'},
    {id : 3, name : '정형돈', age : 30, addr : '수원'},
    {id : 4, name : '하하', age : 10, addr : '서울'},
    {id : 5, name : '노홍철', age : 10, addr : '서울'},
    {id : 6, name : '길', age : 40, addr : '인천'}
]

let data3 = data.map(function(x, y){
    if(x.age===30){

        x.age+=10;
        return x;
    } else {
        return x;
    }
});
console.log(data3);




[
  { id: 1, name: '유재석', age: 20, addr: '서울' },
  { id: 2, name: '정준하', age: 40, addr: '수원' },
  { id: 3, name: '정형돈', age: 40, addr: '수원' },
  { id: 4, name: '하하', age: 10, addr: '서울' },
  { id: 5, name: '노홍철', age: 10, addr: '서울' },
  { id: 6, name: '길', age: 40, addr: '인천' }
]

 

* filter와 차이점은 filter는 단순 조건에 맞는 요소만 모아 배열로 만든다면 map은 조건에 맞는 요소 중 원하는 요소들의 값에 연산을 해 배열로 만들 때 사용한다.

 

 

<body>
    <div class="box">
        <table>
            <caption>신상명세서</caption>
            <colgroup>
                <col class="w1">
                <col class="w2">
                <col class="w3">
                <col class="w4">
                <col class="w5">
            </colgroup>
            <thead>
                <tr>
                    <th scope="col">번호</th>
                    <th scope="col">이름</th>
                    <th scope="col">나이</th>
                    <th scope="col">주소</th>
                    <th scope="col">설명</th>
                </tr>
            </thead>
            <tbody class="tbody">
            </tbody>
        </table>
    </div>
    <script>
        let data = [
            {id:1, name:'유재석', age:30, addr:'서울', msg:'나는 고양이를 키웁니다.'},
            {id:2, name:'정준하', age:40, addr:'서울', msg:'나는 강아지를 키웁니다.'},
            {id:3, name:'정형돈', age:20, addr:'인천', msg:'나는 고슴도치를 키웁니다.'},
            {id:4, name:'권지용', age:10, addr:'수원', msg:'나는 앵무새를 키웁니다.'},
            {id:5, name:'하하', age:20, addr:'부천', msg:'나는 거북이를 키웁니다.'},
            {id:6, name:'노홍철', age:30, addr:'성남', msg:'나는 토끼를 키웁니다.'}
        ]
        let dom = document.querySelector('.tbody');
        let x = '';

        let data2 = data.map((a, b)=>{
            return (
                `<tr>
                    <td>${a.id}</td>
                    <td>${a.name}</td>
                    <td>${a.age}</td>
                    <td>${a.addr}</td>
                    <td>${a.msg}</td>
                </tr>`
            )
        })
        dom.innerHTML = data2.join('');
    </script>
</body>

 

이처럼 map을 활용해 table내용을 작성할 수 있다.

 

 

 

6) forEach

 

forEach 메서드는 요소의 개수만큼 반복처리한다.

 

let arr = [10, 20, 30, 40, 50, 60];
arr.forEach(function(item, idx, arr){
    console.log(item, idx, arr);
})



10 0 [ 10, 20, 30, 40, 50, 60 ]
20 1 [ 10, 20, 30, 40, 50, 60 ]
30 2 [ 10, 20, 30, 40, 50, 60 ]
40 3 [ 10, 20, 30, 40, 50, 60 ]
50 4 [ 10, 20, 30, 40, 50, 60 ]
60 5 [ 10, 20, 30, 40, 50, 60 ]

 

첫 번째 매개변수는 요소를 두 번째는 인덱스를, 세 번째는 배열을 반환한다.

 

 

 

7) reduce

 

reduce는 배열 요소들의 누적합을 구할 때 사용한다.

 

let arr = [10, 20, 30];
let sum = 0;
let sum1 = 0;
let sum2 = 0;
let sum3 = 0;

// for문
for(let i=0; i<arr.length; i++){
    sum += arr[i];
}

// for~of
for(let x of arr){
    sum1+=x;
}

// for~in
for(let y in arr){
    sum2+=arr[y];
}

// forEach
arr.forEach(a=>{
    sum3+=a;
})

 

기존의 메서드를 사용해 요소의 총합을 구하려면 위와 같이 해야 한다.

 

let total=arr.reduce(function(acc, cur, idx, src){
    return acc + cur
},0)

 

이를 reduce 메서드를 사용하면 똑같이 구할 수 있다.

,0 으로 초기값을 0으로 설정해 주고, 누적값인 cur를 더해가면 60이 나오게 된다.

 

let data = [
    {id : 1, name : '유재석', age : 20, addr : '서울'},
    {id : 2, name : '정준하', age : 30, addr : '수원'},
    {id : 3, name : '정형돈', age : 30, addr : '수원'},
    {id : 4, name : '하하', age : 10, addr : '서울'},
    {id : 5, name : '노홍철', age : 10, addr : '서울'},
    {id : 6, name : '길', age : 40, addr : '인천'}
]

let total3=data.reduce((acc, cur)=>acc + cur.age,0)
console.log(total3);



140

 

data 객체의 age값 누적합을 구하고 싶다면 첫 번째 매개변수인 acc가 아닌 두 번째 매개변수인 cur에. age를 해야 한다.

 

 

 

8) flat

 

배열 안에 배열이 있을 때 하나의 배열로 만들어 준다.

'use strict';

const arr1 = [1, 2, [3, 4]];
arr1.flat();


const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();


const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);


const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);




[1, 2, 3, 4]
[1, 2, 3, 4, [5, 6]]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

 

9) every, some

 

두 메서드는 조건(함수)에 맞는 요소가 있는지 확인을 할 때 사용한다.

every : 배열의 요소들이 모두 조건에 만족하면 true, 하나라도 만족 안 하면 false

some : 배열의 요소들이 하나라도 조건에 만족하면 true, 하나라도 없다면 false 

 

let arr = [10, 20, 30, 40, 50];

let arr1 = arr.every(x=>x<50);
console.log(arr1);

let arr2 = arr.some(x=>x<50);
console.log(arr2);



false
true
'🔥 부트캠프-웹 개발 🔥/JavaScript' 카테고리의 다른 글
  • [DAY - 29] dom, querySelectorinner, 속성 추가, setAttribute / getAttribute, 이벤트 종료 방식, 증가/감소
  • [DAY - 28] 이차원배열, Date, Math, dom
  • [DAY - 26] array, for~in, for~of, join, push, pop, shift, unshift, sort, filter
  • [DAY - 25] charAt, slice, substring, toLowercase / toUppercase, concat, trim, indexOf, search, includes, split, replace, padstart
Yeonhub
Yeonhub
✨ https://github.com/yeonhub 📧 lsy3237@gmail.com
  • Yeonhub
    비 전공자의 Be developer
    Yeonhub
  • 전체
    오늘
    어제
    • 전체보기 (169)
      • 🔍 Tech 🔍 (19)
        • Front-End (11)
        • Back-End (4)
        • AI (1)
        • Server (1)
        • Etc (2)
      • 💡 원티드 프리온보딩 챌린지 💡 (14)
        • PRE-ONBOARDING_AI (11월) (1)
        • PRE-ONBOARDING_FE (2월) (2)
        • PRE-ONBOARDING_FE (1월) (2)
        • PRE-ONBOARDING_FE (12월) (9)
      • 🔥 부트캠프-웹 개발 🔥 (118)
        • HTML5 (7)
        • CSS3 (21)
        • JavaScript (27)
        • JavaScript_advanced (9)
        • React (24)
        • Next (1)
        • MYSql (5)
        • Node (5)
        • 오늘하날(개인프로젝트) (12)
        • 이젠제주투어(팀프로젝트) (7)
      • 💻 CS 💻 (1)
        • 알고리즘 (1)
      • ⚡ 코딩테스트 ⚡ (11)
        • JavaScript (11)
      • 📚 Books 📚 (6)
        • 클린 아키텍처 (2)
        • 인사이드 자바스크립트 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    프론트엔드 테스트코드
    react vite
    rn admob
    expo admob
    expo map
    react native bottom sheet
    expo fcm
    node fcm
    react native expo fcm
    라스콘4
    node crontab
    react native analytics
    expo google map
    node cron
    react native admob
    라스콘
    expo 길찾기
    expo 지도
    expo node fcm
    bottom sheet
    php node
    javascript fcm
    컴파운드 컴포넌트 패턴
    expo deep linking
    react native firebase analytics
    rn bottom sheet
    Node
    python node
    expo fcm push
    node.js fcm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Yeonhub
[DAY - 27] at, splice, filter, find, findIndex, map, forEach, reduce, flat, every, some
상단으로

티스토리툴바