61~2일차 배열의 메소드

쿠우·2022년 6월 23일
0

▼ 기존 배열에 배열요소들을 합친다.

        <script>
            var city01=["서울", "부산", "대전"]; 
            var city02=["대구", "광주", "인천"]; 
            var city03=["전주", "부여", "세종"]; 

            var data1=city01.concat("수원", "오산");
            var data2=city01.concat(city02);
            var data3=city01.concat(city03, city02);

            console.group('concat');
                console.log(`city01: ${city01}`);
                console.log(`data1: ${data1}`);
                console.log(`data2: ${data2}`);
                console.log(`data3: ${data3}`);
            console.groupEnd();
        </script> 

▼ 배열 연결부의 결과를 바꿔준다.

        <script>
            var city=["서울", "부산", "대전"]; 
            var joindata1=city.join();
            var joindata2=city.join('-');
            var joindata3=city.join(' 그리고 ');
            console.group('join');
                console.log(`joindata1: ${joindata1}`);
                console.log(`joindata2: ${joindata2}`);
                console.log(`joindata3: ${joindata3}`);
            console.groupEnd('join');
        </script>

▼ 배열 원소의 순서를 반대로 정렬해준다.

        <script>
            var data=[9, 8, 7, 6, 5, 4, 3, 2, 1]; 
            var rdata=data.reverse();    // 배열 원소를 반대로 정렬 
            console.group('reverse');
                console.log(`data: ${data}`);
                console.log(`rdata: ${rdata}`);
            console.groupEnd();
        </script> 


▼ 배열 원소를 정의해둔 방식으로 정렬해준다.

        <script>
            var kdata=['서울', '부산', '구포', '대구', '인천', '대전', '세종']; 
            var str1=kdata.slice(0, 4);
            var str2=kdata.slice(2, -1);
            var str3=kdata.slice(-4, -2);

            //체다 슬라이스 치즈를 떠올리세요 
            // 즉, 배열의 일정부분을 정해서, 잘라내는 것이죠...
            //그런데, 일정부분의 범위 지정시, 음수 인덱스도 사용가능한 것이 특징이죠.
            // 과연 배열에서, "음수 인덱스"의 의미가 무엇일까요?
            // 음수는 뒤에서부터 index를 측정 
            // 올바른 인덱스로 치환하였을 때 끝범위가 포함되지 않는다 .
            console.group('slice');
                console.log(`str1.slice: ${kdata , str1}`);
                console.log(`str2.slice: ${kdata , str2}`);
                console.log(`str3.slice: ${kdata , str3}`);
            console.groupEnd('join');
        </script> 
        <script>
            console.clear(); console.group('4. sort');

            var ndata1=[19, 38, 67, 26, 55, 24, 53, 12, 31]; 
            var ndata2=[132, 2, 41, 123, 45, 1234, 6, 29, 4567]; 

            var edata=['Apple', 'Html', 'Game', 'Computer', 'Java']; 
            var kdata=['서울', '부산', '구포', '대구', '인천']; 


                console.log(`인자 없이 sort > 오름차순: ${ndata1.sort()}`);
                console.log(`인자 없이 sort >  앞자리 수부터 큰수로 오름차순: ${ndata2.sort()}`);
                // 실제 sort 메소드의 정렬방식은, 배열의 원소가 number 이든, String 이든, 
                // 원소값의 각 자릿수 별로 비교하여 크기를 정하다 보니, 결과가 소위 "사전순서"
                // 방식으로 된다 -> 이건 우리가 원하는 일반적인 정렬결과가 아니다 .
                // 일반적인 정렬을 수행하게 만들려면, sort 메소드의 인자값으로, 소위 "비교자"
                // (Comparator, 함수: 2개의 값을 받고 크기를 비교해서 , 누가 크고 작은지를 숫자로 반환)
                // 만일, 두개의 숫자 num1, num2 가 있다고 할 때 , 아래와 같이 크기를 반환한다
                // (1) if num1 > num2 , return +(양수값) => 보통 1반환
                // (2) if num1 == num2 , return 0
                // (3) if num1 < num2 , return -(음수값) => 보통 -1반환
                console.log(`비교자를 적어준 sort: ${ndata2.sort(function(a, b) {return a - b;})}`);
                console.log(`문자는 정렬방식이 있음: ${edata.sort()}`);
                console.log(`한글도 정렬방식이 있음: ${kdata.sort()}`);
            console.groupEnd();
        </script> 

▼ 배열의 특정 범위에 속하는 원소만 선택하여 배열 생성

        <script>
            var kdata=['서울', '부산', '구포', '대구', '인천', '대전', '세종']; 
            var str1=kdata.slice(0, 4); // 0~3까지
            var str2=kdata.slice(2, -1); // 2~5까지
            var str3=kdata.slice(-4, -2); // 3~4까지

            //체다 슬라이스 치즈를 떠올리세요 
            // 즉, 배열의 일정부분을 정해서, 잘라내는 것이죠...
            //그런데, 일정부분의 범위 지정시, 음수 인덱스도 사용가능한 것이 특징이죠.
            // 과연 배열에서, "음수 인덱스"의 의미가 무엇일까요?
            // 음수는 뒤에서부터 index를 측정 
            // 올바른 인덱스로 치환하였을 때 끝범위가 포함되지 않는다 .
            console.group('slice');
                console.log(`str1.slice: ${kdata , str1}`);
                console.log(`str2.slice: ${kdata , str2}`);
                console.log(`str3.slice: ${kdata , str3}`);
            console.groupEnd('join');
        </script> 

▼ 배열의 원소 추가 또는 제거

        <script>
            console.clear();
            console.group('splice');
                var kdata=['서울', '부산', '구포', '대구', '대전'];
                console.log(`kdata: ${kdata}`);
                //배열의 원소를 삭제할 때 : splice 메소드사용
                // 부가적인 기능으로 삭제와 동시에, 새로운 원소를 추가 가능!
                var str1=kdata.splice(1, 2);  // 두번째 원소부터 시작해서 2개원소를 삭제
                console.log(`삭제데이터: ${str1}`);
                console.log(`kdata: ${kdata}`);

                //삭제데이터는 인덱스 1부터 1개 삭제하고 그 위치에 강릉 세종 추가해줘
                var str2=kdata.splice(1, 1, '강릉', '세종');   
                console.log(`삭제데이터: ${str2}`);
                console.log(`kdata: ${kdata}`);

                //인덱스 2번부터 끝까지 삭제하라!
                var str3=kdata.splice(2, Number.MAX_VALUE);   
                console.log(`삭제데이터: ${str3}`);
                console.log(`kdata: ${kdata}`);
            console.groupEnd('join');
        </script> 

▼ 배열 끝에 요소를 추가 끝에 요소를 보여주고 삭제

        <script>
        //push 메소드: 배열의 마지막 위치에 데이터를 추가하고 배열의 길이를 반환
		//pop 메소드: 배열의 마지막 위치에 있는 데이터를 삭제하고 삭제한 데이터를 반환
            
            console.group('push & pop!');
                var kdata=['서울', '부산', '구포', '대구', '대전']; 
                console.log(`데이터: ${kdata}`);

                var p1=kdata.push('청주', '세종');    
                console.log(`push: ${p1}`);
                console.log(`데이터: ${kdata}`);

                var p2=kdata.pop();  
                console.log(`pop: ${p2}`);
                console.log(`데이터: ${kdata}`);
            console.groupEnd('join');

        </script>

▼ 배열 처음을 기준으로 pop push와 반대

        <script>
            
            // shift 메소드: 배열의 맨 처음 위치에 데이터를 삭제하고 배열의 길이 반환
            // unshift 메소드: 배열의 맨 처음 위치에 데이터를 삽입하고 배열의 길이 반환

            console.group('push & pop!');
                var kdata=['서울', '부산']; 
                console.log(`데이터: ${kdata}`);

                var p1=kdata.unshift('청주', '세종') 
                console.log(`push: ${p1}`);
                console.log(`데이터: ${kdata}`);

                var p2=kdata.shift(); 
                console.log(`pop: ${p2}`);
                console.log(`데이터: ${kdata}`);
            console.groupEnd('join');

        </script>

▼ 배열을 반복하며 저장된 데이터를 조회


        <script>
            
            console.clear(); 
            console.group('9. forEach');

            var kdata=['서울', '부산', '청주', '대구']; 
            console.log(`데이터: ${kdata}`);



            //forEach가 개별원소의 값과 인데긋 번호를 넘겨줄테니
            // 개별원소에 대해 무엇을 할지를, 함수로 정의(타스크, Task)해주고,
            // 이 함수를 foreach에 매개변수로 전달해주면 된다!
            function task(item, index){
                console.debug(`task(${item},${index}) invoked.`);
            } // task

            // kdata.forEach(task); //베열의 내부 반복자

            // kdata.forEach(function(item, index){
            //     console.debug(`task(${item},${index}) invoked.`);
            // }); // .forEach

            kdata.forEach(
                (item,inedx) => {console.debug(`task(${item},${index}) invoked.`)};
            );// forEach 왜 안될까..ㅠ



            console.groupEnd();

        </script>


▼ 배열의 데이터를 함수의 인자로 전달하고 함수의 수행 결과를 반환 받아 새로운 배열 생성 ( feat.제곱 연산자 )

        <script>
            
            console.clear(); 
            console.group('10. map');

            var arr=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
            
            console.log("arr: ", arr);


            function mapArr(value) {
                console.log(value, 'invoked')
                return value ** 2;    
            }
            
            var mapdata = arr.map(mapArr);

            console.log("mapdata: ", mapdata);

            console.groupEnd();
        </script>

▼ 배열의 데이터 중에 조건이 참인 데이터만 반환하여 새로운 배열 생성


        <script>
            
            console.clear(); 
            console.group('11. filter');

            var arr=[21, 42, 33, 14, 25, 12, 37, 28, 16, 11]; 
            
            console.log("arr: ", arr);

            function filterArr(value) {
                return value>=18;         
            }
            
            var fdata=arr.filter(filterArr);

            console.log("fdata: ", fdata);

            //원본 데이터는 건들지 않는다.
            console.log("arr: ", arr);

            // 원본데이터: 가공되지 않은 데이터
            // ==> 분석하기 좋은 데이터(tiny data)를 처리
            // ==> 데이터 마이닝, 데이터 머징 등으로 불림

            console.groupEnd();
            
        </script>

▼ 배열의 데이터를 검색하여 인덱스 위치를 반환

        <script>
            
            console.clear(); 
            console.group('12. indexOf');

            const arr=[10, 20, 30, 40, 30, 60, 70, 30, 90,100]; 

            console.log(`데이터: ${arr}`);

            console.log("처음부터 검색한 30의 인덱스",arr.indexOf(30));
            console.log("마지막부터 검색한 30의 인덱스",arr.lastIndexOf(30));
            console.log("세 번째부터 검색한 30의 인덱스",arr.indexOf(30, 3));
            console.log("처음부터 검색한 300의 인덱스",arr.indexOf(300));//-1 반환

            console.groupEnd();
        </script>

배열에는 다 다른 타입이 들어간다
근데!! 함수까지 들어간다

자주 사용해야할 Tip

~~.constructor.prototype 하면 배열이나 객체에 사용할 수 있는 메소드가 어떻게 있는지 확인 할 수있다.

끝!


profile
일단 흐자

0개의 댓글