-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
4주차 과제 구현 #3
base: main
Are you sure you want to change the base?
4주차 과제 구현 #3
Conversation
this.#arr.forEach((item, arrIdx) => { | ||
if (item.key === key) { | ||
idx = arrIdx; | ||
} | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
배열을 순회해서 주어진 키에 해당하는 index를 찾기 위해서 forEach메서드를 활용하셨네요. forEach메서드는 주어진 배열을 모두
순회하는 메서드이기 때문에 의도가 다르게 전달될 수 있어요. 여기서는 주어진 키만 찾으면 탐색을 그만둬야 하기 때문이죠. 따라서 for문을 사용해서 찾으면 그만두던지 아니면 findIndex
를 사용할 수 있어요.
See also
put(key, value) { | ||
if (this.#size === 0 || this.getKey(key) === undefined) { | ||
const obj = { key: key, value: value }; | ||
this.#arr.push(obj); | ||
this.#size++; | ||
} else if (this.#size > 0 && this.getKey(key) !== undefined) { | ||
// 좀 더 조건식을 고칠 수 있을 거 같은데 널체크나 0 길이 체크 시 계속 || && 에러낸다.. | ||
this.#arr[this.getKey(key)].value = value; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
경우에 수를 따져보면 이렇게 될 것 같아요. 이건 조건문으로 만들면 다음과 같아요.
if (this.#size === 0) {
// size가 0
} else {
// size가 0이 아님
if (this.getKey(key) === undefined) {
// getKey가 undefined
} else {
// getKey가 undefined가 아님
}
}
조건문을 사용할 때는 이렇게 진리표를 만들지 않으면 무조건 헷갈립니다. 어려워요. 놓칠 수가 있어요. 그래서 이렇게 진리표를 만들고 하나하나씩 확인해가면서 해야 빠트리지 않습니다. 각 경우를 테스트 코드를 작성해야 놓치는 버그가 없어요.
delete(key) { | ||
const arrKey = this.getKey(key); | ||
if (arrKey !== undefined) { | ||
delete this.#arr[arrKey]; | ||
this.#size--; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
삭제하기 위해서 Array의 해당하는 키를 삭제하고 크기를 줄이셨네요.
Array에서 어떤 값을 삭제하면 한 칸씩 밀어줘야 합니다.
예를들어서 [1, 2, 3, 4, 5]에서 index 2에 해당하는 3을 삭제한다고 해보죠.
delete this.#arr[arrKey];
this.#size--;
만 하게 되면 [1, 2, undefined, 4] 이렇게 됩니다. 그렇게 되면 의도하지 않은 5가 삭제가 되죠?
delete(key) {
const arrKey = this.getKey(key);
if (arrKey !== undefined) {
// 해당하는 키가 덮어써짐
for (let i = arrKey; i < this.#size - 1; i++) {
this.#arr[i] = this.#arr[i + 1];
}
this.#size--;
}
}
그러면 [1, 2, 4, 5]가 되어 3이 삭제가 됩니다.
따라서 배열에서는 값을 삭제하고, 뒤에 배열들을 하나씩 밀어줘야 합니다.
No description provided.