質問編集履歴

2

コードの修正

2019/03/29 08:27

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36134

test CHANGED
File without changes
test CHANGED
@@ -94,8 +94,6 @@
94
94
 
95
95
  _done = _next.done;
96
96
 
97
- console.log(_next);
98
-
99
97
  return _next;
100
98
 
101
99
  },

1

解決しました。

2019/03/29 08:27

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36134

test CHANGED
File without changes
test CHANGED
@@ -65,3 +65,99 @@
65
65
  配列にするのが手っ取り早いというのは理解していますので、純粋に「できるのかな?」という疑問であるとお読みいただければと。
66
66
 
67
67
  よろしくお願いいたします。
68
+
69
+
70
+
71
+
72
+
73
+ ##### 解決されたコード
74
+
75
+ think49 さんのご回答で解決しました。
76
+
77
+ 自前ではないイテレータで使いたかったので、ラッパ関数を作ってみました。
78
+
79
+ ```js
80
+
81
+ const originalIter = Array.from( new Array(10), (_,i)=>i )[Symbol.iterator]();
82
+
83
+
84
+
85
+ const iterWrapper = function(iter){
86
+
87
+ let _done = false;
88
+
89
+ return {
90
+
91
+ next(){
92
+
93
+ const _next = iter.next();
94
+
95
+ _done = _next.done;
96
+
97
+ console.log(_next);
98
+
99
+ return _next;
100
+
101
+ },
102
+
103
+ //_done:false,
104
+
105
+ done(){
106
+
107
+ return _done;
108
+
109
+ },
110
+
111
+ [Symbol.iterator](){
112
+
113
+ return this;
114
+
115
+ }
116
+
117
+ }
118
+
119
+ }
120
+
121
+
122
+
123
+ const iter = iterWrapper(originalIter);
124
+
125
+
126
+
127
+ let [x,y,z] = iter;
128
+
129
+ if (!iter.done()){
130
+
131
+ [x,y,z] = iter;
132
+
133
+ }
134
+
135
+
136
+
137
+ console.log(x,y,z);
138
+
139
+ /*
140
+
141
+ 3,4,5
142
+
143
+ */
144
+
145
+ ```
146
+
147
+ また、補足欄でのご指摘も非情に示唆に富むものでした。
148
+
149
+ イテレータが iterable とは限らない、というのは目から鱗です。
150
+
151
+ 自前でイテレータを実装する時は、
152
+
153
+ ```js
154
+
155
+ [Symbol.iterator](){
156
+
157
+ return this;
158
+
159
+ }
160
+
161
+ ```
162
+
163
+ が必須じゃないか、と思いました。