19
EWD 3 トトトトトト トトト #24 Global トトトトトト JavaScript トトトトト (d) トトトトトトトトトトトトトトトトト M/Gateway Developments Ltd. Rob Tweed ト : トトトトトトトトトトトトト ト トト

EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く

Embed Size (px)

Citation preview

Page 1: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く

EWD 3トレーニング・コース  #24

Global ストレージの JavaScript 用の抽象化 (d) ドキュメントの末端ノードを渡り歩く

M/Gateway Developments Ltd.Rob Tweed

訳 : 日本ダイナシステム株式会社 嶋 芳成

Page 2: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

末端のノード ( 節 ) を渡り歩く?

• 末端のノード ( 節 ) とは、値を持っているが、その下に下位節がない DocumentNode です

2016/9/19 EWD 3 トレーニング・コース #24 4

Page 5: EWD 3トレーニングコース#24 GlobalストレージのJavaScript用抽象化-(e) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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) ドキュメントの末端ノードを渡り歩く

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);});

とても大きく、入れ子の深さも深いドキュメント内のすべての節 ( ノード )をひとつずつ渡り歩く必要がある場合には、入れ子のループよりもはるかに速くできます