【问题标题】:Filter multidimensional array by a column按列过滤多维数组
【发布时间】:2018-08-06 14:39:59
【问题描述】:

我正在尝试创建一个可以在 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);
}

关于我做错了什么有什么想法吗?

【问题讨论】:

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


【解决方案1】:

问题:

  • 您将获得一个二维数组。
  • 您正在推送四个一维数组。

解决办法:

  • 您需要将 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);
    

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多