按列过滤多维数组

时间:2018-08-06 14:40:00

标签: javascript arrays google-apps-script google-sheets

我正在尝试创建一个可以在Google Apps脚本中进行过滤的数组。当数组由我使用range.getValues()从列中获取的值组成时,此方法有效,但当我使用循环创建类似的多维数组时,该方法无效。

我试图自己创建数组,而不是从工作表中获取数组,因为我想要的列不连续:一列是第10列,下一列是第一列,下一列是第三列,等等。

这有效并返回正确过滤的整个多维范围:

function RunReport(){
  var errorSS = SpreadsheetApp.getActive();
  var enterpriseSheet = errorSS.getSheetByName('Enterprise');
  var destSheet = errorSS.getSheetByName('TestSheet');
  var sheetData = [];

  sheetData = enterpriseSheet.getRange(1, 1, 2000, 4).getValues();
  var filtered = sheetData.filter(function(dataRow){
    return dataRow[0] === 'Error';
  });
  Logger.log(filtered);
}

此“有效”但仅返回由“错误值”过滤的数组的第一个“列”,但不返回数组的其他部分:

function RunReport(){
  var errorSS = SpreadsheetApp.getActive();
  var enterpriseSheet = errorSS.getSheetByName('Enterprise');
  var destSheet = errorSS.getSheetByName('TestSheet');

  var sheetData = [];

  var col1 = enterpriseSheet.getRange(1, 1, enterpriseSheet.getLastRow()).getValues();
  var col2 = enterpriseSheet.getRange(1, 10, enterpriseSheet.getLastRow()).getValues();
  var col3 = enterpriseSheet.getRange(1, 2, enterpriseSheet.getLastRow()).getValues();
  var col4 = enterpriseSheet.getRange(1, 3, enterpriseSheet.getLastRow()).getValues();

  for (i = 0; i < col1.length; i++)
  {
    sheetData.push(col1[i],col2[i],col3[i],col4[i]) ;
  }
  var filtered = sheetData.filter(function(dataRow){
    return dataRow[0] === 'Error';
  });
  Logger.log(filtered);
}

关于我在做什么错的任何想法?

1 个答案:

答案 0 :(得分:1)

问题:

  • 您将获得2D阵列。
  • 您要推送四个一维数组。

解决方案:

  • 您需要将4个元素作为一个数组推入。

修改后的脚本:

  • push包含四个元素的单个数组

    //sheetData.push(col1[i],col2[i],col3[i],col4[i]) ; 
    sheetData.push([col1[i][0],col2[i][0],col3[i][0],col4[i][0]]);
    
  • 或者,您可以splice col1中的所有内容:

    //for(i=0 ; i<col1.length ; i++)
    //{ sheetData.push(col1[i],col2[i],col3[i],col4[i]) ;}
    col1.map(function(e,i){
        e.splice(1,0,col2[i][0],col3[i][0],col4[i][0]);
        return e;
    });
    Logger.log(col1);
    

参考文献: