배열 (2)

배열 (2)


1. sort

배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

Array.prototype.sort() - JavaScript | MDN

1): sort 기본

1. sort 기본
 
{
    const data = [10,50,20,60,80,90];
    data.sort();
    console.log(data); // 문자열 유니코드로 정렬
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ 10, 20, 50, 60, 80, 90 ]
 
[Done] exited with code=0 in 0.059 seconds
 
----------------------------------------------------------------------------
 
2. sort 자릿수 정렬
 
{
    const data = [100,150,120,610,80,90];
    data1.sort();
    console.log(data); // 이렇게 하면 자릿수대로 분류를 하기때문에 정렬이 되지않는다
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ 100, 120, 150, 610, 80, 90 ]
 
[Done] exited with code=0 in 0.056 seconds
 
----------------------------------------------------------------------------
 
3. 오름차순 해결 방법 (1)
 
{
    // 오름 차순 정렬
    const data = [100,150,120,610,80,90];
    data.sort(function(a,b){
      if(a>b){
        return 1
      }else if(a<b){
        return -1
      }else{
        //a,b가 같았을때
        return 0
      }
    });
    console.log(data);
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ 80, 90, 100, 120, 150, 610 ]
 
[Done] exited with code=0 in 0.054 seconds
 
----------------------------------------------------------------------------
 
3-1. 오름차순 해결 방법 (2)
 
{
    const data = [100,150,120,610,80,90];
    data.sort((a,b)=>a-b); // 결과값이 하나 일때 return 생략
    console.log(data);
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ 80, 90, 100, 120, 150, 610 ]
 
[Done] exited with code=0 in 0.052 seconds
 
----------------------------------------------------------------------------
 
4. 내림 차순 해결
 
{
    // 내림 차순 정렬
    const data = [100,150,120,610,80,90];
    data.sort(function(a,b){
      if(a>b){
        return -1
      }else if(a<b){
        return 1
      }else{
        //a,b가 같았을때
        return 0
      }
    });
    console.log(data);
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ 610, 150, 120, 100, 90, 80 ]
 
[Done] exited with code=0 in 0.065 seconds
 

2): sort 활용

 
1. 기본 출력
 
{
    const obj = [
        {name:'철수',age:22},
        {name:'영희',age:25},
        {name:'훈이',age:27},
        {name:'짱구',age:26},
        {name:'유리',age:21},
        {name:'맹구',age:22},
        {name:'민지',age:25},
        {name:'재석',age:21},
        {name:'다미',age:22},
      ]
 
      obj.sort((a,b)=>{
        if(a.age>b.age){
          return 1;
        }else if(a.age<b.age){
          return -1;
        }else{
          return 0;
        }
      })
      console.log(obj);
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[
  { name: '유리', age: 21 },
  { name: '재석', age: 21 },
  { name: '철수', age: 22 },
  { name: '맹구', age: 22 },
  { name: '다미', age: 22 },
  { name: '영희', age: 25 },
  { name: '민지', age: 25 },
  { name: '짱구', age: 26 },
  { name: '훈이', age: 27 }
]
 
[Done] exited with code=0 in 0.068 seconds
 
----------------------------------------------------------------------------
 
2. 삼항연산으로 출력
 
{
    const obj = [
        {name:'철수',age:22},
        {name:'영희',age:25},
        {name:'훈이',age:27},
        {name:'짱구',age:26},
        {name:'유리',age:21},
        {name:'맹구',age:22},
        {name:'민지',age:25},
        {name:'재석',age:21},
        {name:'다미',age:22},
      ]
 
      obj.sort((a,b)=>{
        //삼항연산자 조건 ? true : false
        return a.age > b.age ? 1 : a.age < b.age ? -1 : 0
      });
      console.log(obj);
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[
  { name: '유리', age: 21 },
  { name: '재석', age: 21 },
  { name: '철수', age: 22 },
  { name: '맹구', age: 22 },
  { name: '다미', age: 22 },
  { name: '영희', age: 25 },
  { name: '민지', age: 25 },
  { name: '짱구', age: 26 },
  { name: '훈이', age: 27 }
]
 
[Done] exited with code=0 in 0.068 seconds

2. filter

주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

조건에 맞는 값을 출력할 때 , 결과가 배열로 출력

Array.prototype.filter() - JavaScript | MDN

1): filter 기본

 
/* 3의 배수만 출력 */
 
{
    const arr = [10,30,50,20,60,40];
    const result1 = arr.filter((element,index,arr)=>{
        // element 요소값 , index 인덱스번호 , arr 배열값
        return element % 3 ==0;
      });
      console.log(result1);
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ 30, 60 ]
==================================
 
[Done] exited with code=0 in 0.089 seconds
 
----------------------------------------------------------------------------
 
/* filter,indexOf 를 이용해서 김이 들어가있는 값을 출력 */
 
{
    const arr = ['강호동','유재석','이수근','김희철','이효리','김다미']
    const txt = '김';
    //
 
    const result = arr.filter(item=>item.indexOf(txt)!=-1)
    console.log(result);
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
[ '김희철', '김다미' ]
 
[Done] exited with code=0 in 0.053 seconds

2): filter 활용

/*  영희 삭제하고 나머지만 출력 */
{
    const data = [
        {name:'철수',age:22,city:'제주'},
        {name:'영희',age:25,city:'서울'},
        {name:'훈이',age:27,city:'대전'},
        {name:'짱구',age:26,city:'대구'},
        {name:'맹구',age:22,city:'부산'},
      ];
 
 
    const data4 = data.filter((item)=>{
        return item.name != '영희'
      });
      for(let item of data4){
        console.log(item.name,item.age,item.city)
      };
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
철수 22 제주
훈이 27 대전
짱구 26 대구
맹구 22 부산
 
[Done] exited with code=0 in 0.056 seconds
 
----------------------------------------------------------------------------
 
/*  이름이 '구'가 들어간 데이터만 출력 */
{
    const data = [
        {name:'철수',age:22,city:'제주'},
        {name:'영희',age:25,city:'서울'},
        {name:'훈이',age:27,city:'대전'},
        {name:'짱구',age:26,city:'대구'},
        {name:'맹구',age:22,city:'부산'},
    ];
    const txt = '구';
 
 
    // includes,forEach 활용
    const data1 = data.filter(item=>item.name.includes(txt));
    // console.log(data1);
    data1.forEach(item=>console.log(item))
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
{ name: '짱구', age: 26, city: '대구' }
{ name: '맹구', age: 22, city: '부산' }
 
[Done] exited with code=0 in 0.064 seconds
 

3. find,findIndex

1). find : 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다.

Array.prototype.find() - JavaScript | MDN

2). findIndex: 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환합니다. 만족하는 요소가 없으면 -1을 반환

Array.prototype.findIndex() - JavaScript | MDN

/* 40인 데이터 한개만 출력 */
{
    const arr = [10,20,30,40,50];
    const arr3 = arr.find((item)=>{
        return item==40;
      })
      console.log(arr3);
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
40
 
[Done] exited with code=0 in 0.054 seconds
 
----------------------------------------------------------------------------
 
/* 30인 인덱스번호 출력 */
{
    const arr = [10,20,30,40,50];
    const arr5 =arr.findIndex(item=>item==30);
    console.log(arr5); // 해당 데이터의 인덱스 번호를 출력
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
2
 
[Done] exited with code=0 in 0.129 seconds
 

4. map

배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다

반환값: 배열의 각 요소에 대해 실행한 callback의 결과를 모은 새로운 배열.

callback: 새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다.

(1): currentValue: 처리할 현재 요소.

(2): index Optional: 처리할 현재 요소의 인덱스.

(3): array Optional: map()을 호출한 배열.

(4): thisArg Optional: callback을 실행할 때 this로 사용되는 값.

Array.prototype.map() - JavaScript | MDN

/*  map으로 callback 함수 출력 */
{
    const arr = [10,20,30,40,50,60];
    //map => react에서 화면에 반복(for문)처럼 출력하기 위해 사용. (새로운 배열 생성)
    const arr1 = arr.map(function(current,index,array){
        console.log('current:',current,'index:',index,'array:',array);
        return current
    })
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
current: 10 index: 0 array: [ 10, 20, 30, 40, 50, 60 ]
current: 20 index: 1 array: [ 10, 20, 30, 40, 50, 60 ]
current: 30 index: 2 array: [ 10, 20, 30, 40, 50, 60 ]
current: 40 index: 3 array: [ 10, 20, 30, 40, 50, 60 ]
current: 50 index: 4 array: [ 10, 20, 30, 40, 50, 60 ]
current: 60 index: 5 array: [ 10, 20, 30, 40, 50, 60 ]
 
[Done] exited with code=0 in 0.079 seconds
 
----------------------------------------------------------------------------
 
/*  map 데이터 출력 */
{
    const arr = [10,20,30,40,50];
    //arr을 map으로 처리 템플릿 리터널
    const arr1 = arr.map(function(item){
      return (`${item}`)
    })
    console.log(arr1.join(''))
 
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
1020304050
 
[Done] exited with code=0 in 0.054 seconds

5. forEach

주어진 함수를 배열 요소 각각에 대해 실행

반환값:  undefined

callback: 새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다.

(1): currentValue: 처리할 현재 요소.

(2): index Optional: 처리할 현재 요소의 인덱스.

(3): array Optional: forEach()을 호출한 배열.

(4): thisArg Optional: callback을 실행할 때 this로 사용되는 값.

Array.prototype.forEach() - JavaScript | MDN

/*  forEach 데이터 출력 */
{
    const arr = [0,1,2,3,4,5,6,7,8,9,10];
    arr.forEach(function (element,index,array){
      console.log(`${array}의 ${index}번째의 요소는 ${element}`);
    });
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
0,1,2,3,4,5,6,7,8,9,10의 0번째의 요소는 0
0,1,2,3,4,5,6,7,8,9,10의 1번째의 요소는 1
0,1,2,3,4,5,6,7,8,9,10의 2번째의 요소는 2
0,1,2,3,4,5,6,7,8,9,10의 3번째의 요소는 3
0,1,2,3,4,5,6,7,8,9,10의 4번째의 요소는 4
0,1,2,3,4,5,6,7,8,9,10의 5번째의 요소는 5
0,1,2,3,4,5,6,7,8,9,10의 6번째의 요소는 6
0,1,2,3,4,5,6,7,8,9,10의 7번째의 요소는 7
0,1,2,3,4,5,6,7,8,9,10의 8번째의 요소는 8
0,1,2,3,4,5,6,7,8,9,10의 9번째의 요소는 9
0,1,2,3,4,5,6,7,8,9,10의 10번째의 요소는 10
 
[Done] exited with code=0 in 0.057 seconds
 
----------------------------------------------------------------------------
 
/*  forEach 데이터 출력 */
{
    const arr = [0,1,2,3,4,5,6,7,8,9,10];
    arr.forEach((item,i)=>{
        if(i==4){
           console.log("반복문 중단")
          //  break
          // continue
					/* break,continue문은 forEach문에서 사용할 수 없다 */
      }
      console.log(`${[i]}번째 요소 =>${arr[i]}`)
    })
}
 
=>결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
0번째 요소 =>0
1번째 요소 =>1
2번째 요소 =>2
3번째 요소 =>3
반복문 중단
4번째 요소 =>4
5번째 요소 =>5
6번째 요소 =>6
7번째 요소 =>7
8번째 요소 =>8
9번째 요소 =>9
10번째 요소 =>10
 
[Done] exited with code=0 in 0.055 seconds

5. reduce

배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환.

반환 값: 누적 계산의 결과 값.

Array.prototype.reduce() - JavaScript | MDN

1): 리듀서 함수는 네 개의 인자를 가집니다.

(1): 누산기 (acc)

(2): 현재 값 (cur)

(3): 현재 인덱스 (idx)

(4): 원본 배열 (src)

2): callback: 배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 받습니다.

(1): accumulator:누산기는 콜백의 반환값을 누적합니다. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값입니다.

(2): currentValue: 처리할 현재 요소.

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

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

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

/*  reduce 데이터 출력 */
{
    let arr = [10,20,30,40];
    let total = arr.reduce(function(acc,cur,idx,src){
        console.log(acc);
        console.log("--------------------")
        console.log(cur);
        console.log("--------------------")
        console.log(idx);
        console.log("--------------------")
        console.log(src);
        return acc+cur
      })
      console.log(`합:${total}`);
}
 
=> 결과값
 
[Running] node "/workspaces/codespaces-blank/index.js"
accumulator: 10 콜백반환값
--------------------
currentValue: 20 현재요소
--------------------
currentIndex: 1 인덱스
--------------------
array: [ 10, 20, 30, 40 ] 배열
accumulator: 30 콜백반환
--------------------
currentValue: 30 현재요소
--------------------
currentIndex: 2 인덱스
--------------------
array: [ 10, 20, 30, 40 ] 배열
accumulator: 60
--------------------
currentValue: 40 현재요소
--------------------
currentIndex: 3 인덱스값
--------------------
array: [ 10, 20, 30, 40 ] 배열
:100
 
[Done] exited with code=0 in 0.061 seconds