GAS ライブラリー作成② 列・行の操作

#　ダミーデータ

```
var D2Arr = [
  ["織田信長",1560,"桶狭間の戦い"],
　["織田信長",1573,"室町幕府の滅亡"],
  ["織田信長",1582,本能寺の変],
  ["豊臣秀吉",1582,"全国統一"],
  ["徳川家康",1600,"関ヶ原の戦い"],
  ["徳川家康",1615,"大阪夏の陣"]
]
```

# self (列選択)
SELect Fieldの略. 選択したい列番号を配列[]で選択する。

```js:self
    self:
    function (rangeArr){
      var intmp = this.element.concat();        
      var output=[];      
      
      intmp.forEach(function(row,ridx){
        output[ridx]=[];
        rangeArr.forEach(function(col,cidx){
          output[ridx][cidx]=row[col]
        })
      })
     
      this.element=output;
      return this;
    }　
```

```js:結果
D2(D2Arr).self([0,2]).get();
/*[ 
  ["織田信長","桶狭間の戦い"],
　["織田信長","室町幕府の滅亡"],
  ["織田信長","本能寺の変"],
  ["豊臣秀吉","全国統一"],
  ["徳川家康","関ヶ原の戦い"],
  ["徳川家康","大阪夏の陣"]
] */
```


# delf (列削除)
DELect Fieldの略. 削除したい列番号を配列[]で選択する。

```js:delf
    delf:
    function (rangeArr){
      var intmp = this.element.concat();        
      var output=[];
      // rangeメソッドを受取る
      var range =this.range;
      // flattenした、intmpの要素の数のseq
      var inputRangeArr = Array.prototype.concat.apply([], range(0,intmp[0].length-1));

      // 差集合をもとめる
      var subRangeArr = [];
      inputRangeArr.forEach(function(val,idx){
        if(rangeArr.indexOf(val)  <0){
          subRangeArr.push(val)
        }
      })

      intmp.forEach(function(row,ridx){
        output[ridx]=[];
        subRangeArr.forEach(function(col,cidx){
          output[ridx][cidx]=row[col]
        })
      })

      this.element=output;
      return this;
    }
```

```js:結果
D2(D2Arr).self([0,2]).delf([0]).get(); // メソッドはいくつでも並べられる
/*[ 
  ["桶狭間の戦い"],
　["室町幕府の滅亡"],
  ["本能寺の変"],
  ["全国統一"],
  ["関ヶ原の戦い"],
  ["大阪夏の陣"]
] */

```


# selr (行選択)
SELect Recordの略. 選択したい行番号を配列[]で選択する.


```js:selr
    selr:
    function(rangeArr){
      var intmp = this.element.concat();        
      var output=[];
      
      rangeArr.forEach(function(row,ridx){
        output[ridx]=[];
      
        intmp.forEach(function(row1,ridx1){
          if(row==ridx1){
            output[ridx] =row1;
          }
        })
      })
      
      this.element=output;
      return this;
    }
```

```js:結果
D2(D2Arr).selr([0,1,2]).get(); 
/*[
  ["織田信長",1560,"桶狭間の戦い"],
　["織田信長",1573,"室町幕府の滅亡"],
  ["織田信長",1582,本能寺の変]
] */
```

# delr (行削除)
DELete Recordの略. 削除したい行番号を配列[]で選択する. 
ユニケージはdelrはD2ライブラリーではdelerKeyと等しい.

```js:delr
    delr:
    function(rangeArr){
      var intmp = this.element.concat();        
      var output=[];
      // rangeメソッドを受取る
      var range =this.range;
      // flattenした、intmpの要素の数のseq
      var inputRangeArr = Array.prototype.concat.apply([], range(0,intmp.length-1));
      
      // 差集合をもとめる
      var subRangeArr = [];
      inputRangeArr.forEach(function(val,idx){
        if(rangeArr.indexOf(val)  <0){
          subRangeArr.push(val)
        }
      })
      
      subRangeArr.forEach(function(row,ridx){
        output[ridx]=[];
      
        intmp.forEach(function(row1,ridx1){
          if(row==ridx1){
            output[ridx] =row1;
          }
        })
      })
      
      this.element=output;
      return this;
    }
```

```js:結果
D2(D2Arr).delr([0,1,2]).get(); 
/*[
  ["豊臣秀吉",1582,"全国統一"],
  ["徳川家康",1600,"関ヶ原の戦い"],
  ["徳川家康",1615,"大阪夏の陣"]
] */
```


# selrKey (行検索選択)
selrの文字列検索.
第1引数:列番号(ひとつ)
第2引数:検索文字列

```js:selrKey
    selrKey:
    function(fieldNo,searchKey){
      var intmp = this.element.concat();        
      var output=[];
      
      intmp.forEach(function(row,ridx){
        if(row[fieldNo]==searchKey){
          output.push(row);          
        }
      })
      
      this.element=output;
      return this;
    }
```

```js:結果
D2(D2Arr).selrKey(0,"徳川家康").get();
/*[
  ["徳川家康",1600,"関ヶ原の戦い"],
  ["徳川家康",1615,"大阪夏の陣"]
]*/
```


# delrKey (行検索削除)
delrの文字列検索.
第1引数:列番号(ひとつ)
第2引数:検索文字列

```js:delrKey
    delrKey:
    function(fieldNo,searchKey){
      var intmp = this.element.concat();        
      var output=[];
      
      intmp.forEach(function(row,ridx){
        if(row[fieldNo]!=searchKey){
          output.push(row);          
        }
      })
      
      this.element=output;
      return this;
    }
```

```js:結果
D2(D2Arr).selrKey(0,"徳川家康").delrKey(1,1600).get();
/*[
  ["徳川家康",1615,"大阪夏の陣"]
]*/
```