質問編集履歴

2

コードの修正

2019/03/29 08:27

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37460

title CHANGED
File without changes
body CHANGED
@@ -46,7 +46,6 @@
46
46
  next(){
47
47
  const _next = iter.next();
48
48
  _done = _next.done;
49
- console.log(_next);
50
49
  return _next;
51
50
  },
52
51
  //_done:false,

1

解決しました。

2019/03/29 08:27

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37460

title CHANGED
File without changes
body CHANGED
@@ -31,4 +31,52 @@
31
31
  とすればいいのはわかりますが、分割代入もしたいのです。
32
32
 
33
33
  配列にするのが手っ取り早いというのは理解していますので、純粋に「できるのかな?」という疑問であるとお読みいただければと。
34
- よろしくお願いいたします。
34
+ よろしくお願いいたします。
35
+
36
+
37
+ ##### 解決されたコード
38
+ think49 さんのご回答で解決しました。
39
+ 自前ではないイテレータで使いたかったので、ラッパ関数を作ってみました。
40
+ ```js
41
+ const originalIter = Array.from( new Array(10), (_,i)=>i )[Symbol.iterator]();
42
+
43
+ const iterWrapper = function(iter){
44
+ let _done = false;
45
+ return {
46
+ next(){
47
+ const _next = iter.next();
48
+ _done = _next.done;
49
+ console.log(_next);
50
+ return _next;
51
+ },
52
+ //_done:false,
53
+ done(){
54
+ return _done;
55
+ },
56
+ [Symbol.iterator](){
57
+ return this;
58
+ }
59
+ }
60
+ }
61
+
62
+ const iter = iterWrapper(originalIter);
63
+
64
+ let [x,y,z] = iter;
65
+ if (!iter.done()){
66
+ [x,y,z] = iter;
67
+ }
68
+
69
+ console.log(x,y,z);
70
+ /*
71
+ 3,4,5
72
+ */
73
+ ```
74
+ また、補足欄でのご指摘も非情に示唆に富むものでした。
75
+ イテレータが iterable とは限らない、というのは目から鱗です。
76
+ 自前でイテレータを実装する時は、
77
+ ```js
78
+ [Symbol.iterator](){
79
+ return this;
80
+ }
81
+ ```
82
+ が必須じゃないか、と思いました。