JS에서 2D 정수 배열을 만드는 방법은 무엇입니까?

4086 단어
오늘은 JS를 사용하여 leetcode daily Challenge를 작업했습니다. 배열에 사소한 문제가 있었는데 배열을 만드는 올바른 방법을 찾았습니다. 이것이 제가 어레이를 만든 방법입니다.

let dp = [...Array(n+1)].map(e => Array(m+1).fill(0))


잠깐 기다려요? 물어보면 더 자세한 설명을 해주세요.
나는 사용했다.

let dp = new Array(1001)


아래 코드도 작동한다고 가정했습니다.

let dp = new Array(1001).fill(new Array(1001).fill(0))


하지만 시도했을 때 코드에서 예기치 않은 문제가 발생했습니다.


그래서 스프레드 연산자를 사용해 보았습니다.


그러나 여전히 문제가 해결되지 않았습니다. 내 코드가 예상대로 작동하지 않습니다.

백그라운드에서 무슨 일이 일어나고 있습니까?



이를 이해하려면 Array.prototype.fill에서 발생하는 상황과 작동 방식을 이해해야 합니다.

Fill은 Array의 프로토타입입니다.
fill() 메서드는 배열의 모든 요소를 ​​시작 인덱스(기본값 0)에서 끝 인덱스(기본값 array.length)까지 정적 값으로 변경합니다. 수정된 배열을 반환합니다.

여기서 말하지 않는 것은?



첫 번째 매개변수가 객체인 경우 배열의 각 슬롯은 해당 객체를 참조합니다.

그것이 도움이 된다고 생각한다면, 그러나 다른 것에 대해서는 동일한 참조를 가지고 있기 때문입니다.

// A single object, referenced by each slot of the array:
const arr = Array(3).fill({}); // [{}, {}, {}]
arr[0].hi = "hi";              // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]


그래서 2D 배열을 만들 때 채우기를 사용할 수 없었습니다. 하지만 언젠가는 훨씬 효율적으로 2D 어레이를 생성하기 위한 새로운 프로토타입을 갖게 될 것이라고 말하고 싶습니다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill

Note:
For that matter, always be cautious sometimes. It's not about how you write the code. It's also about how the prototypes is written using any standard prototype.
So whenever you use any prototype, you must know about them again and not take them for granted.

좋은 웹페이지 즐겨찾기