-
카테고리
-
세부 분야
프론트엔드
-
해결 여부
해결됨
Uncaught TypeError: tries.map is not a function
23.04.30 02:37 작성 조회수 298
0
function getNumbers() { // 숫자 네 개를 겹치치 않고 랜덤하게 뽑는 함수
const candidate = [1,2,3,4,5,6,7,8,9]
const array = []
for (let i = 0; i<4; i+=1) {
const chosen = candidate.splice(Math.floor(Math.random()*(9-i)), 1)[0]
array.push(chosen)
}
return array
}
const NumberBaseball = () => {
const [result, setResult] = useState('')
const [value, setValue] = useState('')
const [answer, setAnswer] = useState(getNumbers) // lazy init
const [tries, setTries] = useState([])
const submit = (e) => {
e.preventDefault()
if (value === answer.join('')) {
setResult('홈런!')
setTries(...tries, {try:value, result:'홈런!'})
alert('게임을 다시 시작합니다!')
setValue('')
setAnswer(getNumbers())
setTries([])
} else { // 답 틀렸으면
const answerArray = value.split('').map((v)=> parseInt(v))
let strike = 0
let ball = 0
if(tries.length >= 9) { // 10번 이상 틀렸을 때
setResult(`10번 넘게 틀려서 실패! 답은 ${answer.join(', ')}였습니다!`)
alert('게임을 다시 시작합니다!')
setValue('')
setAnswer(getNumbers())
setTries([])
} else {
for (let i=0; i<4; i++) {
if (answerArray[i] === answer[i]) {
strike += 1
} else if (answer.includes(answerArray[i])) {
ball += 1
}
}
setTries({tries: [...tries, {try:value, result: `${strike} 스트라이크, ${ball} 볼입니다.`}]})
setValue('')
}
}
}
const change = (e) => {
setValue(e.target.value)
}
return (
<>
<h1>{result}</h1>
<form onSubmit={submit}>
<input maxLength={4} value={value} onChange={change}/>
</form>
<div>시도: {tries.length}</div>
<ul>
{tries.map((value, index) => {
return (
<Try key={`${index+1}차 시도 : ${value.try}`} tryInfo={value} />
)
})}
</ul>
</>
)
}
Uncaught TypeError: tries.map is not a function 오류가 뜨는데 원인을 모르겠습니다
답변을 작성해보세요.
0
조현영
지식공유자2023.04.30
setTries({tries: [...tries, {try:value, result: `${strike} 스트라이크, ${ball...
여기서 tries를 배열이 아니라 객체로 바꿔버리셨네요
답변 1