GoogleAppsScript

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

 ダミーデータ

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

self (列選択)

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

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

delf (列削除)

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

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

selr (行選択)

SELect Recordの略. 選択したい行番号を配列[]で選択する.
ユニケージはselrはD2ライブラリーではselerKeyと等しい.

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;
    }
結果
D2(D2Arr).selr([0,1,2]).get(); 
/*[
  ["織田信長",1560,"桶狭間の戦い"],
 ["織田信長",1573,"室町幕府の滅亡"],
  ["織田信長",1582,本能寺の変]
] */

delr (行削除)

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

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;
    }
結果
D2(D2Arr).delr([0,1,2]).get(); 
/*[
  ["豊臣秀吉",1582,"全国統一"],
  ["徳川家康",1600,"関ヶ原の戦い"],
  ["徳川家康",1615,"大阪夏の陣"]
] */

selrKey (行検索選択)

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

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;
    }
結果
D2(D2Arr).selrKey(0,"徳川家康").get();
/*[
  ["徳川家康",1600,"関ヶ原の戦い"],
  ["徳川家康",1615,"大阪夏の陣"]
]*/

delrKey (行検索削除)

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

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;
    }
結果
D2(D2Arr).selrKey(0,"徳川家康").delrKey(1,1600).get();
/*[
  ["徳川家康",1615,"大阪夏の陣"]
]*/