A-HA💡/JS

[JS/알고리즘] (2차원) 배열 길이와 값 지정하여 선언하기⭐️

탱 'ㅅ' 2023. 9. 21. 15:32

23.09.21

for문 말고 더 효율적인 코드가 없을까 찾아보다가

 

const len = 3, val = 2
const arr = new Array(5).fill(0) // [0, 0, 0, 0, 0]
const arr2 = new Array(len).fill(val) // [2, 2, 2]

23.10.31 (백준 2563)

2차원 배열 초기화 방법은 위처럼 하면 안 된다.

 

∵ Array.fill() 함수는 메모리 참조하여 복사하기 때문에,

   어떤 동작을 수행하든 모든 열에 똑같이 적용되는 불상사 발생한다.

 

∴ 길이와 값을 설정할 수 있는  Array.from(arrayLike, mapFn) 을 이중으로 사용한다.

 

 

🔖 Array.from(arrayLike, mapFn)

1. { length: N }

  

2. new Array( N ) 

 

3. Array( N )

 

// 길이가 N인 배열 생성

Array.from( { length: N }, mapFn )

Array.from( new Array(N), mapFn )

Array.from( Array(N), mapFn )

 

 

🔖 Array.from(arrayLike, mapFn)

1. ( ) => 0

 

2. ( ) => [ ]

 

3. ( ) => Array.from( {  length: 10 }, () => 0 )

 

🚫 error case1. 모든 열에 동일한 값 (얕은 복사)

() => new Array(10).fill(0))  

 

🚫 error case2. 함수 일부만 변수 선언

const rowArr =    Array.from({ length: N }, ( ) => 0)
Array.from(arrayLike,
() => rowArr) 

 

// 모든 값을 0으로 초기화
Array.from( arrayLike, () => 0 )

// 빈 2차원 배열로 초기화
Array.from( arrayLike, () => [] )


// 각 요소가 [0, 0, 0]인 2차원 배열로 초기화
// case1
Array.from( arrayLike, () => Array.from( { length: 3 }, () => 0 ) )

🚫 // 모든 열에 동일한 값 (얕은 복사)  
Array.from( arrayLike, () => new Array(3).fill(0) )
   
// case2
const rowArr = () => Array.from( { length: 3 }, () => 0 )
Array.from( arrayLike, rowArr )  

🚫 // 함수 자리에 변수를 이용할 때는 변수 자체가 함수여야한다!
const rowArr = Array.from( { length: 3 }, () => 0 )
Array.from( arrayLike, () => rowArr )

 

 

 

 

 

 

ref.

 

[Node.js] Javascript: 지정한 길이에 맞게 배열을 선언하고 값을 초기화하는 방법들

배열 선언 및 초기화 방법 길이가 N인 배열 arr을 선언하면서 동시에 값을 초기화하고 싶은 경우 CASE 1: for문 이용 const N = 5; // 길이 N을 5라고 가정 let arr = []; for(let i=0; i

miiingo.tistory.com

 

[Js] 2차원 배열 new Array().fill()로 값 할당할 때 주의할 점

요새 프론트엔드가 js로 코딩테스트 보는게 많아져서 js로 여러 알고리즘 문제를 풀고있는데... 알고리즘 문제를 풀다보면 배열을 초기화 해놓고 그 배열을 이용하는 경우가 많다. 그래서 js도 배

aeunhi99.tistory.com

 

Array.from() - JavaScript | MDN

Array.from() 정적 메서드는 순회 가능 또는 유사 배열 객체에서 얕게 복사된 새로운 Array 인스턴스를 생성합니다.

developer.mozilla.org