Array.from()
Array.from() 함수는 알고리즘 문제를 풀면서 보통 두 가지 기능이 필요할 때 사용한다.
1. 문자열이나 정수 값을 배열로 반환할 때
2. 순회할 때
구문
Array.from(arrayLike)
Array.from(arrayLike, mapFn)
Array.from(arrayLike, mapFn, thisArg)
arrayLike - 배열로 변환할 객체
mapFn - 배열에 각 요소를 생성하는 함수 (두 개의 매개변수 배열의 각 요소, 현재 요소의 인덱스를 받는다.)
thisArg - mapFn 실행시 this로 사용할 값
Array.from(obj, mapFn, thisArg)는 Array.from(obj).map(mapFn, thisArg)와 동일한 결과를 가져올 수 있다.
Array.from([1, 2, 3], (x) => x + x));
//Output: [2, 4, 6]
Array.from([1, 2, 3]).map((x) => x + x));
//Output: [2, 4, 6]
예제
1. 문자열을 배열로 반환
Array.from("hello");
//Output: ["h", "e", "l", "l", "o"]
2. 배열 연산
Array.from([1, 2, 3], (x) => x * x);
//Output: [1, 4, 9]
3. 순회
const originalArray = Array.from({ length: 5 }, (_, index) => index + 1);
console.log(originalArray);
//Output: [1, 2, 3, 4, 5]
알고리즘 문제를 1차적으로 for문으로 풀어보고 2차로 Array.from()를 활용해 다시 풀어보았다.
프로그래머스⎜배열 만들기 1
- 문제 설명
- 정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
- 제한 사항
- 1 ≤ n ≤ 1,000,000
- 1 ≤ k ≤ min(1,000, n)
for문
function solution(n, k) {
const result = [];
for(let i = 1; i <= n; i++) {
if (i % k === 0) {
result.push(i)
}
}
return result;
}
Array.from()
function solution(n, k) {
return Array.from({ length : n }, (_, index) => index + 1).filter(number => number % k === 0)
}
console.log(solution(10, 3))
//Output: [3, 6, 9]
- 풀이
Array.from({ length: n }, (_, index) => index + 1)
(_, index)
위의 코드에서 _는 첫 번째 매개변수인 현재 요소로, "사용하지 않는 매개변수"를 나타내는 관례적인 표현이다. 코드를 읽는 사람에게 해당 매개변수를 사용하지 않겠다는 의미를 전달한다. 코드의 의도를 명확히 하기 위한 관례적인 표현이므로 _ 대신 다른 변수명을 사용해도 문법적으로는 문제가 없다고 한다.
(_, index) => index + 1)
요소 자체를 사용하지 않고 인덱스만 사용하여 각 인덱스에 1을 더해 배열을 생성한다.
Array.from()의 장점
Array.from()는 간결하고 가독성이 좋다.
반복문을 사용하지 않고도 변환된 값으로 새로운 배열을 생성할 때 유용하다.
로직이 간단하여 유지보수를 수행할 때 코드를 이해하기 쉽다.
참고
MDN https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/from
블로그 https://ziszini.tistory.com/174
'Language > JavaScript' 카테고리의 다른 글
[JavaScript] 정규 표현식(Regular Expression) 플래그와 패턴 (2) | 2024.02.09 |
---|---|
[JavaScript] 전개 연산자(...) 이해하기, 예제코드 (1) | 2024.01.11 |
[JavaScript] Array.reduce() 배열의 합계, 평균 (0) | 2024.01.10 |
[JavaScript] Math.trunc()와 Math.floor()의 차이 (0) | 2024.01.08 |
[JavaScript] Callback Function|콜백함수 동기,비동기 (0) | 2023.07.27 |