ewd 3トレーニングコース#24 globalストレージのjavascript用抽象化-(e)...
TRANSCRIPT
![Page 1: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/1.jpg)
EWD 3トレーニング・コース #24
Global ストレージの JavaScript 用の抽象化 (d) ドキュメントの末端ノードを渡り歩く
M/Gateway Developments Ltd.Rob Tweed
訳 : 日本ダイナシステム株式会社 嶋 芳成
![Page 2: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/2.jpg)
2
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
ドキュメントの全節 ( ノード ) を渡り歩くのは大変
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachChild(function(nodeName,childNode) { childNode.forEachChild(function(nodeName, childNode) { childNode.forEachChild(function(nodeName, childNode) { // 一番内側のノードについて何かをする }); });});
![Page 3: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/3.jpg)
3
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
ドキュメントの全節 ( ノード ) を渡り歩くのは大変
この例では、 11 回の繰り返し
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachChild(function(nodeName,childNode) { childNode.forEachChild(function(nodeName, childNode) { childNode.forEachChild(function(nodeName, childNode) { // 一番内側のノードについて何かをする }); });});
![Page 4: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/4.jpg)
末端のノード ( 節 ) を渡り歩く?
• 末端のノード ( 節 ) とは、値を持っているが、その下に下位節がない DocumentNode です
2016/9/19 EWD 3 トレーニング・コース #24 4
![Page 5: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/5.jpg)
5
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
![Page 6: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/6.jpg)
6
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
![Page 7: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/7.jpg)
7
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
![Page 8: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/8.jpg)
8
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
![Page 9: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/9.jpg)
9
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
この例を縦断するには、なんと 8 回の繰り返しが必要です
![Page 10: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/10.jpg)
10
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
この例を縦断するには、なんと 8 回の繰り返しが必要です
DocumentNode には、別のメソッドがあります
forEachLeafNode()
![Page 11: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/11.jpg)
11
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(value);});
![Page 12: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/12.jpg)
12
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(value);});
123 foo foo2 bar1a bar2a bar1b bar2b bar3b
![Page 13: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/13.jpg)
13
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(value);});
末端節 ( ノード ) の値
![Page 14: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/14.jpg)
14
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(value);});
末端節 ( ノード ) の DocumentNode オブジェクト
![Page 15: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/15.jpg)
15
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { // この節 ( ノード ) に対するプロパティや添え字の配列はどのように取得しますか?});
![Page 16: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/16.jpg)
16
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(JSON.stringify(leafNode._node.subscripts));});
![Page 17: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/17.jpg)
17
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(JSON.stringify(leafNode._node.subscripts));});
['a'] ['b', 'c1'] ['b', 'c2'] ['d', 'e1', 'f1a'] ['d', 'e1', 'f2a'] ['d', 'e2', 'f1b'] ['d', 'e2', 'f2b'] ['d', 'e2', 'f3b']
![Page 18: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/18.jpg)
18
途中で中断するmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { if (leafNode._node.subscripts[0] === 'd') return true; console.log(value);});
途中で中止するには、コールバック関数から、 true を返します
![Page 19: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く](https://reader035.vdocuments.pub/reader035/viewer/2022073017/58f1921f1a28ab94768b45ff/html5/thumbnails/19.jpg)
19
末端のノードについて繰り返すmyDoc("a") = 123myDoc("b","c1")="foo"myDoc("b","c2")="foo2"myDoc("d","e1","f1a")="bar1a"myDoc("d","e1","f2a")="bar2a"myDoc("d","e2","f1b")="bar1b"myDoc("d","e2","f2b")="bar2b"myDoc("d","e2","f3b")="bar3b"
2016/9/19 EWD 3 トレーニング・コース #24
var doc = new this.documentStore.DocumentNode('myDoc');
doc.forEachLeafNode(function(value, leafNode) { console.log(value);});
とても大きく、入れ子の深さも深いドキュメント内のすべての節 ( ノード )をひとつずつ渡り歩く必要がある場合には、入れ子のループよりもはるかに速くできます