[JS] 배열 함수 모음

gem·2022년 4월 8일
0

배열

두배열 비교

정렬 후 비교, 중복값제거

  • sort
var arr1 = ['a','b','b','c','d'];
var arr2 = ['a','b'];
var result = [];

// 정렬
arr1.sort();
arr2.sort();

for(let i in arr1) {
        if(arr1[i] !== arr2[i]) result[i] = arr1[i];
}

// 빈값 제거
result = result.filter(x => x !== undefined);

console.log(arr1); // ['a', 'b', 'b', 'c', 'd']
console.log(arr2); // ['a', 'b', 'c']
// 중복 데이터도 각각의 데이터로 인식됨
console.log(result); // ['b', 'c', 'd']

교집합 찾기

  • filter
  • include
 var arr1 = ['a','c'];
 var arr2 = ['c','e','f'];
    
 var result = arr1.filter(x => arr2.includes(x));
 console.log(result); // ['c']
  • Array.prototype.filter() : 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환
 var arr = ['aaaaa','bbbb','ccc','dd'];
    
 var result = arr.filter(x => x.length > 3);
 console.log(result); // ['aaaaa','bbbb']
  • Array.prototype.includes() : 배열이 특정 요소를 포함하고 있는지 판별
 var arr = ['a','b','c','d'];
    
 var result1 = arr.includes('a');
 var result2 = arr.includes('e');
 console.log(result1); // true
 console.log(result2); // false

차집합 찾기

  • filter
  • include
 var arr1 = ['a','b','b','c','d'];
 var arr2 = ['a','b'];
    
 var result = arr1.filter(x => !arr2.includes(x));
// 중복 데이터도 제외됨
 console.log(result); // ['c','d']

특정값 찾기

모든 중복값 위치 찾기

var arr = ['a','b','b','c','d','b'];
var find = "b";
var result = [];

var index = arr.indexOf(find);

while(index != -1){
     result.push(index);
     index = arr.indexOf(find,index+1); 
}
console.log(result); // [1,2,5]
  • Array.prototype.indexOf() : 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환
var arr = ['a','b','b','c','d','b'];

// array.indexOf(ele,fromIndex)
// fromIndex : 해당 index부터 찾기 시작
var index1 = arr.indexOf('b');
var index2 = arr.indexOf('b',3);

console.log(index1); // 1
console.log(index2); // 5

중복값 찾아서 제거

배열 중복제거하는 5가지 방법

  • reduce
  • includes
var array = ['a','b','b','c','d','b'];


let result = array.reduce((ac, v) => 
                          ac.includes(v) ? 
                          ac : [...ac, v]
                          , []);

console.log(result); // ['a', 'b', 'c', 'd']
  1. 누적값의 초기값을 배열로 선언하여 새로운 배열을 생성하고 => var ac = [],
  2. 배열에 현재값이 포함되어 있는지 확인 => ac.includes(v)
  3. 있으면 배열 그대로 전달 => ac
  4. 없으면 배열에 현재값 추가해서 전달 => [...ac, v]
  • Array.prototype.reduce() : 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환
    Array.reduce((누적값, 현잿값, 인덱스, 요소) => { 
    	return 결과; 
    }, 초깃값);
const arr = [1, 2, 3];

result = arr.reduce((acc, cur, i) => {
  console.log(acc, cur, i);
  // 0 1 0
  // 1 2 1
  // 3 3 2
  
  return acc + cur;
}, 0);

console.log(result); // 6

객체 property에서 최대값, 최소값 찾기

let obj = { a: 4, b: 0.5 , c: 0.35, d: 5 };
var arr = Object.keys( obj ).map(function ( key ) { return obj[key]; });
var min = Math.min.apply( null, arr );
var max = Math.max.apply( null, arr );
console.log(min)
var data = [
  { 'name': 'Vins', 'age': 27 },
  { 'name': 'Jan', 'age': 38 },
  { 'name': 'Alex', 'age': 80 },
  { 'name': 'Carl', 'age': 25 },
  { 'name': 'Digi', 'age': 40 }
];
var max = data.reduce(function (prev, current) {
   return (prev.age > current.age) ? prev : current
});
console.log(max); // {name: 'Alex', age: 80}

출처

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

profile
연봉킹이 되고 싶은 개발자

0개의 댓글