만족
[Nodejs] 코딩 테스트 필수 테크닉: Array 본문
[Nodejs] 코딩 테스트 필수 테크닉: Array
Nodejs Satisfaction 2021. 7. 23. 21:31자바스크립트로 코딩 테스트를 볼 때 반드시 알아야 Array 관련 함수에 대해 알아보자
Array.prototype.forEach
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
배열의 각 원소에 대해 callback 함수를 호출한다.
(callback함수의 매개변수: (현재 요소 값, 현재 인덱스 번호, 원본 배열))
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// expected output: "a"
// expected output: "b"
// expected output: "c"
간편하지만, 반복 중간에 중지하고 싶어도 그럴 수 없다.
(무조건 처음부터 끝까지 순회한다)
Array.prototype.every
// 화살표 함수
every((element) => { ... } )
every((element, index) => { ... } )
every((element, index, array) => { ... } )
// 콜백 함수
every(callbackFn)
every(callbackFn, thisArg)
// 인라인 콜백 함수
every(function callbackFn(element) { ... })
every(function callbackFn(element, index) { ... })
every(function callbackFn(element, index, array){ ... })
every(function callbackFn(element, index, array) { ... }, thisArg)
every는 forEach와 달리 중간에 반복을 멈출 수 있다.
콜백의 리턴값이 true인 경우 다음 원소로 다시 callback을 호출하는 것을 반복하지만
false인 경우 반복을 멈춘다.
(callback함수의 매개변수: (현재 요소 값, 현재 인덱스 번호, 원본 배열))
const isBelowThreshold = (currentValue) => currentValue < 40;
const array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
// expected output: true
Array.prototype.map
arr.map(callback(currentValue[, index[, array]])[, thisArg])
배열의 각 원소에 대해 callback 함수를 호출하고, 그 callback의 리턴값으로 이루어진 새로운 배열을 만들어 리턴한다.
(callback함수의 매개변수: (현재 요소 값, 현재 인덱스 번호, 원본 배열))
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
새로운 배열을 만들기 위함이 아니더라도,
각 원소에 대해 반복하기 위해서도 사용한다.
Array.prototype.filter
arr.filter(callback(element[, index[, array]])[, thisArg])
배열의 각 원소들에 대해 callback을 호출하는데,
이 callback의 리턴값이 true인 원소들로만 이루어진 새로운 배열(필터링된 배열)을 만든다.
(callback함수의 매개변수: (현재 요소 값, 현재 인덱스 번호, 원본 배열))
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
Array.prototype.reduce
arr.reduce(callback[, initialValue])
initalValue부터 시작해 배열의 각 원소들에 대해 callback을 호출하여 누적값을 계산한다.
reduce는 콜백을 받는 다른 Array함수와는 조금 다르다.
콜백의 첫 인자가 acc(누적값)이고, 나머지가 하나씩 뒤로 밀린 형태이므로, 사용할 때 주의하자.
(callback함수의 매개변수: (누적값, 현재 요소 값, 현재 인덱스 번호, 원본 배열))
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
Array.prototype.indexOf
arr.indexOf(searchElement[, fromIndex])
주어진 원소가 몇번 index에 있는지 리턴하는 함수이다.
찾았을 경우 해당 원소의 index, 찾지 못했을 경우 -1을 리턴한다.
var array = [2, 9, 9];
array.indexOf(2); // 0
array.indexOf(7); // -1
array.indexOf(9, 2); // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0
(두 번쨰 매개변수는 탐색을 시작할 인덱스; 기본값 0)
주의! 이 함수는 콜백을 받는게 아니라 찾고자 하는 원소를 입력받는다.
따라서 object, array 타입인 경우 참조 값을 직접 전달하는 게 아니라면 찾을 수 없다.
const arr1= [{name: 'asd'}];
//return -1 (not found)
//{}=== {} 의 결과가 false 임에 유의하자.
console.log(arr1.indexOf({name: 'asd'}));
const arr2= [[1,2]];
//return -1 (not found)
//[] === [] 의 결과가 false임에 유의하자.
console.log(arr2.indexOf([1,2]));
Array.prototype.findIndex
arr.findIndex(callback(element[, index[, array]])[, thisArg])
indexOf를 콜백 형태로 사용할 때 findIndex를 사용한다.
배열의 각 원소에 대해 순차적으로 callback을 호출하고,
callback에서 true를 리턴할 경우 탐색을 종료하고 그 원소의 인덱스를 반환한다.
(callback함수의 매개변수: (현재 요소 값, 현재 인덱스 번호, 원본 배열))
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
// expected output: 3
Array.prototype.fill
fill(value)
fill(value, start)
fill(value, start, end)
배열의 원소를 value로 모두 채운다.
const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
이 함수는 길이가 n인 배열을 만들 때 유용하다.
왜냐면
Array(6).forEach(console.log)
이건 6번 반복할 것으로 기대하지만, 값이 전부 empty라서 0번 반복한다.
따라서 fill로 무의미한 값을 먼저 채워줘야 정상적으로 순회할 수 있다.
Array(6).fill(0).forEach(console.log)
이제 콘솔에 6번 찍힌다.
Array.prototype.sort
arr.sort([compareFunction])
배열을 주어진 콜백 함수의 결과에 따라 정렬한다.
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]
주의! sort는 원본 배열을 변형시킨다.
만약 원본 배열은 보존하고 싶을 경우 arr.slice().sort(...) 처럼 slice()로 값을 복사한 후 정렬해야 한다.
Array.prototype.slice
arr.slice([begin[, end]])
arr를 begin부터 end까지 잘라 새로운 배열을 리턴한다.
begin의 기본값은 0, end의 기본값은 배열의 길이이다.
(end에 해당하는 인덱스는 제외된다; end 전까지의 요소만 추출된다)
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]
console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]
console.log(animals.slice(-2));
// expected output: Array ["duck", "elephant"]
console.log(animals.slice(2, -1));
// expected output: Array ["camel", "duck"]
이 함수는 배열을 복사할 때(얕은 복사) 아주 유용하다.
const arr= [1,2,3];
//copied= [1,2,3];
const copied= arr.slice();
copied[0]= 0;
console.log(arr, copied);
//arr= [1,2,3];
//copied= [0,2,3];
Array.prototype.splice
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
배열의 startIndex부터 deleteCount만큼 요소를 제거한다.
(리턴값 없음)
만약 매개변수가 3개 이상 전달될 경우, 제거한 위치에 itemN을 차례로 대체시킨다.
const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]
months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]
주의! splice는 원본 배열을 변형시키며, 아무 값도 리턴하지 않는다.
함수 이름이 비슷한 slice와 헷갈리지 않도록 하자.
Array.prototype.join
arr.join([separator])
배열의 각 요소를 구분자를 이용해 하나의 문자열로 합친다.
const elements = ['Fire', 'Air', 'Water'];
console.log(elements.join());
// expected output: "Fire,Air,Water"
console.log(elements.join(''));
// expected output: "FireAirWater"
console.log(elements.join('-'));
// expected output: "Fire-Air-Water"
Array.prototype.reverse()
arr.reverse()
배열의 순서를 거꾸로 뒤집는다.
const a = [1, 2, 3];
console.log(a); // [1, 2, 3]
a.reverse();
console.log(a); // [3, 2, 1]
주의! reverse는 원본 배열을 변형시킨다.
전개 연산자 (전개 구문)
...arr
배열 앞에 ...을 붙여 배열을 전개시킬 수 있다.
const arr1= [1,2,3];
const arr2= [4,5,6];
const arr3= [...arr1, ...arr2];
//arr3= [1,2,3,4,5,6]
비구조화 할당 (구조 분해 할당)
const arr= [1,2];
const [a,b]= arr;
//a=1, b=2
arr을 다른 값에 할당할 때, []로 씌워 할당하면 해당 배열의 인덱스 위치에 있는 값들을 차례로 할당한다.
'Nodejs' 카테고리의 다른 글
[Nodejs] 코딩 테스트 필수 테크닉: Math (0) | 2021.07.30 |
---|---|
[Nodejs] 코딩 테스트 필수 테크닉: String (0) | 2021.07.29 |
[Nodejs] PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR (0) | 2021.05.18 |
[Nodejs] Error: read ECONNRESET at TCP.onStreamRead (node:internal/stream_base_commons:213:20) (0) | 2020.12.18 |
[Nodejs] RangeError: Invalid string length (0) | 2020.07.07 |