【问题标题】:Filter rows after last row with data, keep gaps in place用数据过滤最后一行之后的行,保持空白
【发布时间】:2018-12-19 18:49:12
【问题描述】:

谷歌应用脚​​本: 我使用了sslink.getRange("C2:C").getValues().filter(String);,但它消除了空白(没有数据的行)。

有没有办法在没有数据的行之间保留,但删除最后一行之后的所有行?

比如我有数据

a = [a,b,,c,d,,e,,,,,]

我想找到e的索引(一个非空数组,最后一个可能是f、g、h等),所以我可以简单地删除其余数据:

a.length = 7

提前致谢!

【问题讨论】:

    标签: javascript arrays google-apps-script


    【解决方案1】:

    如果你的数组中的值是字符串,那么这样的东西可能对你有用:

    var a = ['a', 'b', '', 'c', 'd', '', 'e', '', '', '', '', ''];
    
    function removeTrailingSpaces(array) {
      while (array[array.length - 1].length === 0) {
        array.pop();
      }
    }
    
    removeTrailingSpaces(a);
    console.log(a);
    console.log(a.length);

    【讨论】:

    • 非常优雅的解决方案!谢谢!
    【解决方案2】:

    试试这个:

    function getData(){
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getActiveSheet();
      var rg=sh.getDataRange();
      var vA=rg.getValues();
      for(var i=0;i<vA.length;i++){
        vA[i]=vA[i].slice(2,3);
      }
      while(!vA[vA.length-1][0]){
        vA.splice(vA.length-1,1);
      }
      return vA
    }
    

    【讨论】:

      【解决方案3】:

      C2:C 是一个二维数组,看起来不像a。使用反向循环来确定最后一个元素的索引。

      片段:

      var a=[["a"],["b"],[""],["c"],["d"],[""],["e"],[""],[""],[""],[""],[""]];
      var i= a.length;
      while(i--){
       if(a[i][0] !== ""){break;}
      }
      a.length=++i;
      

      【讨论】: