알고리즘 문제들을 풀다가 배열 메서드들의 종류가 상당히 많다는 것을 알게 되었고, 한번 정리를 해놓으면 도움이 될거라는 생각이 들었다.
Array.isArray([]); //true
Array.isArray([1, 2]); //true
Array.isArray(new Array()); //true
Array.isArray([name = 1, key = 2]); //true
Array.isArray(); //false
Array.isArray('Hi'); //false
Array.isArray(null); //false
Array.isArray(undefined);//false
Array.isArray(1); //false
- indexOf 메서드는 배열에 특정 요소가 존재하는지 확인할 때 유용하다.
const fruits = ['apple', 'orange', 'grape'];
console.log(fruits.indexOf('grape')); // 2 인덱스 2에 존재
console.log(fruits.indexOf('banana')); // 존재하지 않으므로 -1 반환
const fruits = ['apple', 'orange', 'grape'];
console.log(fruits.includes('grape')); // true
console.log(fruits.includes('banana')); // false
const arr = [1, 2, 3];
console.log(arr.push(4)); // 4
console.log(arr); // [1, 2, 3, 4];
const arr = [1, 2, 3];
const newArr = [...arr, 4];
console.log(newArr.length); //4
console.log(newArr); // [1, 2, 3, 4];
console.log(arr); // [1, 2, 3];
const arr = [1, 2, 3];
console.log(arr.pop()); // 3
console.log(arr); // [1, 2]
const arr = [1, 2, 3];
console.log(arr.unshift(4, 5)); //5
console.log(arr); // [4, 5, 1, 2, 3]
const arr = [1, 2, 3];
const newArr = [4,5, ...arr];
console.log(arr); // [1, 2, 3]
console.log(newArr); // [4, 5, 1, 2, 3]
const arr = [1, 2, 3];
console.log(arr.shift()); // 1
console.log(arr); // [2, 3];
const arr1= [1, 2];
const arr2= [3, 4];
let result = arr1.concat(arr2); // [1, 2, 3, 4]
result = arr1.concat(3);
console.log(result); // [1, 2, 3]
result = arr1.concat(arr2, 5);
console.log(result); // [1, 2, 3, 4, 5]
//원본 배열은 변경되지 않는다.
console.log(arr1) //[1, 2]
const arr1 = [1, 2];
const arr2 = [3, 4];
let result = [...arr1, ...arr2];
console.log(result); //[1, 2, 3, 4]
const arr = [1, 2, 3, 4];
//원본 배열의 인덱스 1부터 2개의 요소를 제거하고, 그 자리에 새로운 요소 20, 30을 삽입한다.
const result = arr.splice(1, 2, 30, 40);
console.log(result); // [2, 3] 제거한 요소가 반환된다.
console.log(arr); // [1, 30, 40, 4] splice 메서드는 원본 배열을 직접 변경한다.
const arr = [1, 2, 3, 4];
//arr[0] 부터 arr[1](arr[1] 미포함)이전까지 복사하여 반환한다.
let result = arr.slice(0, 1);
console.log(result) // [1]
result = arr.slice(1, 2);
console.log(result); // [2]
console.log(arr); // [1, 2, 3, 4]
const arr = [1, 2, 3, 4];
let result = arr.join();
console.log(result); // 1, 2, 3, 4
result = arr.join('');
console.log(result); // 1234
result = arr.join(':');
console.log(result); // 1:2:3:4
const arr = [1, 2, 3, 4];
let result = arr.reverse();
console.log(result); // [4, 3, 2, 1]
console.log(arr); // [4, 3, 2, 1]
const arr = [1, 2, 3, 4, 5];
let result = arr.fill(1);
console.log(result); // [1, 1, 1, 1, 1]
result = arr.fill(0, 1); // 인수로 전달받은 값 0을 인덱스 1부터 끝까지 채운다.
console.log(result); // [1, 0, 0, 0, 0]
result = arr.fill(1, 1, 3);
console.log(result); // [1, 1, 1, 0, 0], fill 메서드는 원본 배열을 직접 변경한다.
const arr = new Array(12);
console.log(arr); // [ <12 empty items>]
const result = arr.fill(0);
console.log(result); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
const arr = [1, [2, 3, 4, 5]];
let result = arr.flat();
console.log(result) // [1, 2, 3, 4, 5]
result = arr.flat(1) // 깊이 값의 기본값은 1이다.
console.log(result); // [1, 2, 3, 4,5]
const arr = [1,[2, [3, [4]]]];
console.log(arr.flat(2)); // [ 1, 2, 3, [ 4 ]]
console.log(arr.flat(Infinity)); // [1, 2, 3, 4]
console.log(Array.of(1)); // [1]
console.log(Array.of(1, 2, 3)); // [1, 2, 3]
console.log(Array.of('String')); // ['String']
console.log(Array.from({length : 2, 0 : 'a', 1 : 'b'})); // ['a', 'b']
console.log(Array.from('Hello')); // [ 'H', 'e', 'l', 'l', 'o' ]
고차 함수는 함수를 인수로 전달받거나 함수를 반환하는 함수를 말한다.
자바스크립트는 함수형 프로그래밍 언어로서 조건문과 반복문을 제거하여 복잡성을 해결하고 변수의 사용을 억제하여 상태 변경을 피하려는 언어이다. 자바스크립트는 고차 함수를 다수 지원하는데, 그 중에서도 배열은 매우 유용한 고차 함수를 지원한다.
const fruits = ['Banana', 'Orange', 'Apple'];
fruits.sort();
console.log(fruits); // [ 'Apple', 'Banana', 'Orange' ]
const fruits = ['바나나', '오렌지', '사과'];
fruits.sort();
console.log(fruits); // [ '바나나', '사과', '오렌지' ]
const fruits = ['Banana', 'Orange', 'Apple'];
fruits.sort();
console.log(fruits); // [ 'Apple', 'Banana', 'Orange' ]
fruits.reverse();
console.log(fruits); // [ 'Orange', 'Banana', 'Apple' ]
const numbers = [40, 100, 10, 5, 2, 25, 11, 3];
numbers.sort();
// 제대로 잘 정렬이 되지 않는다.
console.log(numbers); // [10, 100, 11, 2, 25, 3, 40, 5]
const numbers = [40, 100, 10, 5, 2, 25, 11, 3];
// 오름차순 정리
numbers.sort((a, b) => {return a - b});
console.log(numbers); // [2, 3, 5, 10, 11, 25, 40, 100]
// 내림차순 정리
numbers.sort((a, b) => {return b - a });
console.log(numbers); // [100, 40, 25, 11, 10, 5, 3, 2]
const numbers = [1, 2, 3, 4, 5];
const arr = [];
numbers.forEach((nums) => {
return arr.push(nums ** 2);
})
console.log(arr); // [ 1, 4, 9, 16, 25 ]
const result = [1, 2, 3].forEach((nums) => {return nums});
console.log(result); // undefined
const numbers = [1, 4, 9];
const roots = numbers.map((nums) => {
return Math.sqrt(nums);
})
console.log(roots); // [1, 2, 3]
console.log(numbers); // [1, 4, 9]
const numbers = [1, 2, 3, 4, 5];
const odds = numbers.filter((item) => {return item % 2;})
console.log(odds); // [ 1, 3, 5 ]
reduce는 내용이 많아 따로 게시글로 빼놓았습니다!
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const result = numbers.some((item) => {return item > 10});
console.log(result); // false
---------------------------------------------------------------------------------------------------
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const result = numbers.some((item) => {return item >= 10});
console.log(result); // true
---------------------------------------------------------------------------------------------------
const numbers = [];
const result = numbers.some((item) => {return item});
console.log(result); // false
const numbers = [1, 2, 3, 4, 5];
const result = numbers.every((item) => { return item > 0 });
console.log(result) // true
---------------------------------------------------------------------------------------------------
const numbers = [1, 2, 3, 4, 5];
const result = numbers.every((item) => { return item > 1 });
console.log(result) // false
---------------------------------------------------------------------------------------------------
const numbers = [];
const result = numbers.every((item) => { return item });
console.log(result) // true
- filter 메서드는 콜백 함수의 호출 결과가 true 인 요소만 추출한 새로운 배열을 반환한다. 따라서 filter 메서드의 반환값은 언제나 배열이다.
하지만 find 메서드는 콜백 함수의 반환값이 true인 첫 번째 요소를 반환하므로 find의 결과값은 배열이 아닌 요소다.
[1, 2, 2, 3].filter((item) => item === 2 ); // [2, 2] 배열 반환
[1, 2, 2, 3].find((item) => item === 2); // 2 요소 반환
const users = [
{id : 1, name : 'Lee'},
{id : 2, name : ' Kim'},
{id : 3, name : 'Choi'},
{id : 4, name : 'Park'}
];
users.findIndex((users) => users.id === 2); // 1
users.findIndex((users) => users.name === 'Park'); // 3
users.findIndex((users) => users.id === 5); // -1
flatMap 메서드는 map 메서드를 통해 생성된 새로운 배열을 평탄화 한다. map 메서드와 flat 메서드를 순차적으로 실행하는 효과가 있다.
flatMap 메서드는 평탄화 깊이를 지정할 수는 없고 1단계만 가능하다. 깊이를 지정하려면 map 과 flat 메서드를 따로따로 써주어야 한다.
(밑에 예시처럼 split 메서드와 함께 써주면 좋을거 같다..!)
const arr = ['hello', 'world'];
const result = arr.flatMap((item) => {return item.split('')});
console.log(result); // ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']