Skip to content

Commit bbc22bf

Browse files
[Object.keys, values, entries] 글, 과제 보완
1 parent 8cff27b commit bbc22bf

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

1-js/05-data-types/09-keys-values-entries/02-count-properties/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ alert( count(user) ); // 2
1717

1818
가능한 짧게 코드를 작성해 보세요.
1919

20-
주의: 심볼형 프로퍼티는 무시하고 "일반" 프로퍼티 개수만 세주세요.
20+
주의: 심볼형 프로퍼티는 무시하고 '일반' 프로퍼티 개수만 세주세요.
2121

1-js/05-data-types/09-keys-values-entries/article.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
개별 자료 구조에서 한발 뒤로 물러나 순회에 관해 이야기 나누어봅시다.
55

6-
이전 챕터에서 `map.keys()`, `map.values()`, `map.entries()`와 같은 메서드들을 보았습니다.
6+
이전 챕터에서 `map.keys()`, `map.values()`, `map.entries()`와 같은 메서드들에 대해 알아보았습니다.
77

88
이 메서드들은 포괄적인 용도로 만들어졌기 때문에 이 메서드들이 적용될 자료구조는 일련의 합의를 준수해야 합니다. 자료구조를 직접 만들어서 사용하려면 기존에 구현된 메서드를 쓰지 못하고 직접 커스텀 메서드를 구현해야 합니다.
99

@@ -13,28 +13,28 @@
1313
- `Set`
1414
- `Array`
1515

16-
일반 객체에도 유사한 메서드가 있는데, `Map`, `Set`, `Array`적용되는 메서드와는 문법이 약간 다릅니다.
16+
일반 객체에도 유사한 메서드를 적용할 수 있는데, `Map`, `Set`, `Array`적용하는 메서드와는 문법이 약간 다릅니다.
1717

1818
## Object.keys, values, entries
1919

20-
일반 객체엔 다음 메서드를 사용할 수 있습니다.
20+
일반 객체엔 다음과 같은 메서드를 사용할 수 있습니다.
2121

2222
- [Object.keys(obj)](mdn:js/Object/keys) -- 키가 담긴 배열을 반환합니다.
2323
- [Object.values(obj)](mdn:js/Object/values) -- 값이 담긴 배열을 반환합니다.
2424
- [Object.entries(obj)](mdn:js/Object/entries) -- `[key, value]` 쌍이 담긴 배열을 반환합니다.
2525

26-
여타 자료구조에 적용되는 메서드와 객체에 적용되는 메서드의 차이는 아래와 같습니다(맵을 기준으로 비교).
26+
`Map`, `Set`, `Array`에 적용하는 메서드와 객체에 적용하는 메서드의 차이를 맵을 기준으로 비교하면 다음과 같습니다.
2727

2828
| || 객체 |
2929
|-------------|------------------|--------------|
3030
| 호출 문법 | `map.keys()` | `obj.keys()`가 아닌 `Object.keys(obj)` |
3131
| 반환 값 | iterable 객체 | '진짜' 배열 |
3232

33-
첫 번째 차이는 `obj.keys()`가 아닌 `Object.keys(obj)`호출해야만 한다는 점입니다.
33+
첫 번째 차이는 `obj.keys()`가 아닌 `Object.keys(obj)`호출한다는 점입니다.
3434

35-
이유는 유연성 때문입니다. 아시다시피 자바스크립트에선 복잡한 자료구조 모두가 객체에 기반하고 있습니다. 그러다 보니 자체 메서드 `data.values()`가 있는 객체 `data`가 정의된 경우도 있을 수 있죠. 이렇게 자체 메서드를 구현했더라도 `Object.values(data)`같이 다른 형태로 메서드를 호출할 수 있으면 자체 메서드와 내장 메서드 둘 다를 사용할 수 있습니다.
35+
이렇게 문법에 차이가 있는 이유는 유연성 때문입니다. 아시다시피 자바스크립트에선 복잡한 자료구조 전체가 객체에 기반합니다. 그러다 보니 객체 `data`에 자체적으로 메서드 `data.values()`를 구현해 사용하는 경우가 있을 수 있습니다. 이렇게 커스텀 메서드를 구현한 상태라도 `Object.values(data)`같이 다른 형태로 메서드를 호출할 수 있으면 커스텀 메서드와 내장 메서드 둘 다를 사용할 수 있습니다.
3636

37-
두 번째 차이는 메서드 `Object.*`를 호출하면 iterable 객체가 아닌 객체인 배열을 반환한다는 점입니다. '진짜' 배열을 반환하는 이유는 하위 호환성 때문입니다.
37+
두 번째 차이는 메서드 `Object.*`를 호출하면 iterable 객체가 아닌 객체의 한 종류인 배열을 반환한다는 점입니다. '진짜' 배열을 반환하는 이유는 하위 호환성 때문입니다.
3838

3939
예시:
4040

@@ -49,7 +49,7 @@ let user = {
4949
- `Object.values(user) = ["John", 30]`
5050
- `Object.entries(user) = [ ["name","John"], ["age",30] ]`
5151

52-
아래 예시에선 `Object.values`사용해 프로퍼티 값을 대상으로 원하는 작업을 하고 있습니다.
52+
아래 예시처럼 `Object.values`사용하면 프로퍼티 값을 대상으로 원하는 작업을 할 수 있습니다.
5353

5454
```js run
5555
let user = {
@@ -63,7 +63,7 @@ for (let value of Object.values(user)) {
6363
}
6464
```
6565

66-
```warn header="Object.keys/values/entries는 심볼형 프로퍼티를 무시합니다."
66+
```warn header="Object.keys, values, entries는 심볼형 프로퍼티를 무시합니다."
6767
`for..in` 반복문처럼, Object.keys, Object.values, Object.entries는 키가 심볼형인 프로퍼티를 무시합니다.
6868
6969
대개는 심볼형 키를 연산 대상에 포함하지 않는 게 좋지만, 심볼형 키가 필요한 경우엔 심볼형 키만 배열 형태로 반환해주는 메서드, [Object.getOwnPropertySymbols](mdn:js/Object/getOwnPropertySymbols)를 사용하면 됩니다. `getOwnPropertySymbols` 이외에도 *모든* 키를 배열 형태로 반환하는 메서드, [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys)를 사용할 수 있습니다.
@@ -72,12 +72,12 @@ for (let value of Object.values(user)) {
7272

7373
## 객체 변환하기
7474

75-
객체는 `map`, `filter` 같은 배열 전용 메서드를 지원하지 않습니다.
75+
객체엔 `map`, `filter` 같은 배열 전용 메서드를 사용할 수 없습니다.
7676

77-
`Object.entries``Object.fromEntries`를 순차적으로 적용하면 객체에도 배열 전용 메서드를 적용할 수 있습니다.
77+
하지만 `Object.entries``Object.fromEntries`를 순차적으로 적용하면 객체에도 배열 전용 메서드 사용할 수 있습니다. 적용 방법은 다음과 같습니다.
7878

7979
1. `Object.entries(obj)`를 사용해 객체의 키-값 쌍을 요소로 갖는 배열을 얻습니다.
80-
2. 1.에서 만든 배열에 `map`과 같은 배열 전용 메서드를 적용합니다.
80+
2. 1.에서 만든 배열에 `map` 등의 배열 전용 메서드를 적용합니다.
8181
3. 2.에서 반환된 배열에 `Object.fromEntries(array)`를 적용해 배열을 다시 객체로 되돌립니다.
8282

8383
위 방법을 사용해 가격 정보가 저장된 객체 prices의 프로퍼티 값을 두 배로 늘려보도록 합시다.
@@ -99,4 +99,4 @@ let doublePrices = Object.fromEntries(
9999
alert(doublePrices.meat); // 8
100100
```
101101

102-
지금 당장은 어렵게 느껴지겠지만 한두 번 위와 같은 방법을 적용해 객체에 배열 전용 메서드를 사용하다 보면 이해하기 수월할 겁니다.
102+
지금 당장은 어렵게 느껴지겠지만 한두 번 위와 같은 방법을 적용해 보면 객체에 배열 전용 메서드를 손쉽게 적용할 수 있을 겁니다.

0 commit comments

Comments
 (0)