回答編集履歴
1
Object.create(null)
answer
CHANGED
@@ -1,6 +1,16 @@
|
|
1
|
+
### 数値添字配列
|
2
|
+
|
1
3
|
JavaScriptの配列は**数値添字配列**であり、文字列添字配列に対応していないからです。
|
2
|
-
文字列添字配列が必要な場合は、
|
4
|
+
文字列添字配列が必要な場合は、次のいずれかを使用する事になります。
|
3
5
|
|
6
|
+
- オブジェクト初期化子(`{}`)
|
7
|
+
- `Object.create(null)`
|
8
|
+
- `new Map`
|
9
|
+
|
10
|
+
### new Map
|
11
|
+
|
12
|
+
Map には `Map.prototype.forEach` があるので、比較的扱いやすいといえます。
|
13
|
+
|
4
14
|
```JavaScript
|
5
15
|
'use strict';
|
6
16
|
function foo (string) {
|
@@ -17,6 +27,31 @@
|
|
17
27
|
|
18
28
|
console.log(map.get('a')); // 1
|
19
29
|
console.log(JSON.stringify([...map.entries()])); // [["a","1"],["b","2"],["c","3"]]
|
30
|
+
|
31
|
+
map.forEach((value, key) => console.log(value, key));
|
20
32
|
```
|
21
33
|
|
34
|
+
### Object.create(null)
|
35
|
+
|
36
|
+
`Object.create(null)` は `{}` とほぼ等価ですが、プロトタイプ上にオブジェクトが存在しない為、`__proto__` 等の規定値となる名前もキー名に出来るメリットがあります。
|
37
|
+
|
38
|
+
```JavaScript
|
39
|
+
'use strict';
|
40
|
+
function foo2 (string) {
|
41
|
+
var object = Object.create(null);
|
42
|
+
|
43
|
+
for (var i = 0, array = string.split(','), len = array.length, entry; i < len; ++i) {
|
44
|
+
entry = array[i].split(':');
|
45
|
+
object[entry[0]] = entry[1];
|
46
|
+
}
|
47
|
+
|
48
|
+
return object;
|
49
|
+
}
|
50
|
+
|
51
|
+
var object = foo2('a:1,b:2,c:3');
|
52
|
+
|
53
|
+
console.log(object.a); // 1
|
54
|
+
Object.keys(object).forEach(key => console.log(key, object[key]));
|
55
|
+
```
|
56
|
+
|
22
57
|
Re: tesopgmh さん
|