Array.fill이 배열을 깨는 방법!
5555 단어 webdevjavascriptbeginners
소개
배열로 작업할 때 Array.from
와 Array.fill
의 차이에 항상 주의해야 합니다.
Array.fill
훨씬 더 간단한 구문을 가지고 있기 때문에 매우 유혹적입니다Array.fill
. 그러나 다차원 배열에 관해서는 불쾌한 작은 짐승입니다.
Array.fill
actually references the same object in memory.
이것은 무엇을 의미 하는가?
5*5 다차원 배열을 만들 수 있습니다. 이것은 셀 시스템을 기반으로 비디오 게임을 생성하는 데 사용할 수 있습니다.
let test = new Array(5).fill(new Array(5).fill("1"))
console.log(test)
이것은 우리에게 다음과 같은 출력을 제공합니다:
[
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
하나의 셀만 수정하려고 할 때까지는 모든 것이 꽤 괜찮아 보입니다.
test[0][1] = "5"
console.log(test)
이것은 우리에게 다음과 같은 출력을 제공합니다:
[
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ]
]
무엇을 기다립니다???
메모리에서 동일한 개체를 참조한다는 것은 하나의 열을 변경할 때 한 열의 모든 셀이 변경된다는 것을 의미합니다!
Array.from 구조
Array.from
더 반복적인 접근 방식을 사용하고 동일한 객체를 참조하지 않습니다. 이는 우리가 무엇이든 수정할 수 있음을 의미합니다.
let fixed = Array.from({length: 5}, () => (
Array.from({length: 5}, () => ("1"))
))
console.log(fixed)
이것은 우리에게 다음과 같은 출력을 제공합니다:
[
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
지금은 똑같아 보이지만 셀을 수정하려고 하면:
fixed[0][1] = "5"
console.log(fixed)
다음 출력을 얻습니다.
[
[ '1', '5', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
우훗
이제 실제 다차원 배열을 만들 수 있습니다.
벌렛 메데릭
https://medericburlet.com
https://mederic.me
Reference
이 문제에 관하여(Array.fill이 배열을 깨는 방법!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/crimsonmed/how-array-fill-can-break-arrays-3cdc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
훨씬 더 간단한 구문을 가지고 있기 때문에 매우 유혹적입니다
Array.fill
. 그러나 다차원 배열에 관해서는 불쾌한 작은 짐승입니다.
Array.fill
actually references the same object in memory.
이것은 무엇을 의미 하는가?
5*5 다차원 배열을 만들 수 있습니다. 이것은 셀 시스템을 기반으로 비디오 게임을 생성하는 데 사용할 수 있습니다.
let test = new Array(5).fill(new Array(5).fill("1"))
console.log(test)
이것은 우리에게 다음과 같은 출력을 제공합니다:
[
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
하나의 셀만 수정하려고 할 때까지는 모든 것이 꽤 괜찮아 보입니다.
test[0][1] = "5"
console.log(test)
이것은 우리에게 다음과 같은 출력을 제공합니다:
[
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ],
[ '1', '5', '1', '1', '1' ]
]
무엇을 기다립니다???
메모리에서 동일한 개체를 참조한다는 것은 하나의 열을 변경할 때 한 열의 모든 셀이 변경된다는 것을 의미합니다!
Array.from 구조
Array.from
더 반복적인 접근 방식을 사용하고 동일한 객체를 참조하지 않습니다. 이는 우리가 무엇이든 수정할 수 있음을 의미합니다.
let fixed = Array.from({length: 5}, () => (
Array.from({length: 5}, () => ("1"))
))
console.log(fixed)
이것은 우리에게 다음과 같은 출력을 제공합니다:
[
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
지금은 똑같아 보이지만 셀을 수정하려고 하면:
fixed[0][1] = "5"
console.log(fixed)
다음 출력을 얻습니다.
[
[ '1', '5', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
우훗
이제 실제 다차원 배열을 만들 수 있습니다.
벌렛 메데릭
https://medericburlet.com
https://mederic.me
Reference
이 문제에 관하여(Array.fill이 배열을 깨는 방법!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/crimsonmed/how-array-fill-can-break-arrays-3cdc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let fixed = Array.from({length: 5}, () => (
Array.from({length: 5}, () => ("1"))
))
console.log(fixed)
[
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
fixed[0][1] = "5"
console.log(fixed)
[
[ '1', '5', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ],
[ '1', '1', '1', '1', '1' ]
]
Reference
이 문제에 관하여(Array.fill이 배열을 깨는 방법!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/crimsonmed/how-array-fill-can-break-arrays-3cdc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)