Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript谷歌脚本2d数组:组合相似值_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

javascript谷歌脚本2d数组:组合相似值

javascript谷歌脚本2d数组:组合相似值,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,在google电子表格中,我使用javascript创建了一个嵌套的2D数组 “工时”表是员工为不同类别添加不同工时的表。 这里有一个带有submit()函数触发器的图像。 “批准”表从“工时”表中接收一些数据,经理可以在其中批准 以下是脚本: function cleanArray(actual){ var newArray = new Array(); for(var i = 0; i<actual.length; i++){ if(actual[i] != "") {

在google电子表格中,我使用javascript创建了一个嵌套的2D数组

“工时”表是员工为不同类别添加不同工时的表。 这里有一个带有submit()函数触发器的图像。 “批准”表从“工时”表中接收一些数据,经理可以在其中批准

以下是脚本:

function cleanArray(actual){
  var newArray = new Array();
  for(var i = 0; i<actual.length; i++){
    if(actual[i] != "") {
      newArray.push(actual[i]);
    };
  };
  return newArray;
}

function addArray(array){
  var sum = 0;
  for(var i=0; i<array.length; i++) {
    sum += Number(array[i]);
  };
  return sum;
}

function createArray(cats, hours) {
  var newArray = new Array();
  for (i in hours) {
    if(hours[i] != "" ) {
      if(cats[i] == '') { cats[i] = "Unclaimed" };
      newArray[i] = new Array(cats[i], hours[i]);
    };
  };
  return newArray;
}

function submit() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Hours');
  var employee = sheet.getRange('B1').getValue();
  var startDate = sheet.getRange('C2').getValue();

  var mondayHours = sheet.getRange('B4:B9').getValues();
  var mondayCats = sheet.getRange('D4:D9').getValues();
  var mondayArray = createArray(mondayCats, mondayHours);
  var mondayTtl = addArray(mondayHours);

  var tuesdayHours = sheet.getRange('B11:B16').getValues();
  var tuesdayCats = sheet.getRange('D11:D16').getValues();
  var tuesdayArray = createArray(tuesdayCats, tuesdayHours);
  var tuesdayTtl = addArray(tuesdayHours);

  var wednesdayHours = sheet.getRange('B18:B23').getValues();
  var wednesdayCats = sheet.getRange('D18:D23').getValues();
  var wednesdayArray = createArray(wednesdayCats, wednesdayHours);
  var wednesdayTtl = addArray(wednesdayHours);

  var thursdayHours = sheet.getRange('B25:B30').getValues();
  var thursdayCats = sheet.getRange('D25:D30').getValues();
  var thursdayArray = createArray(thursdayCats, thursdayHours);
  var thursdayTtl = addArray(thursdayHours);

  var fridayHours = sheet.getRange('B32:B37').getValues();
  var fridayCats = sheet.getRange('D32:D37').getValues();
  var fridayArray = createArray(fridayCats, fridayHours);
  var fridayTtl = addArray(fridayHours);

  var saturdayHours = sheet.getRange('B39:B44').getValues();
  var saturdayCats = sheet.getRange('D39:D44').getValues();
  var saturdayArray = createArray(saturdayCats, saturdayHours);
  var saturdayTtl = addArray(saturdayHours);

  var sundayHours = sheet.getRange('B46:B51').getValues();
  var sundayCats = sheet.getRange('D46:D61').getValues();
  var sundayArray = createArray(sundayCats, sundayHours);
  var sundayTtl = addArray(sundayHours);

  var weekArray = new Array();
  for (i in mondayArray){
    weekArray.push(mondayArray[i]);
  };
  for (i in tuesdayArray){
    weekArray.push(tuesdayArray[i]);
  };
  for (i in wednesdayArray){
    weekArray.push(wednesdayArray[i]);
  };
  for (i in thursdayArray){
    weekArray.push(thursdayArray[i]);
  };
  for (i in fridayArray){
    weekArray.push(fridayArray[i]);
  };
  for (i in saturdayArray){
    weekArray.push(saturdayArray[i]);
  };
  for (i in sundayArray){
    weekArray.push(sundayArray[i]);
  };

  var weekHours = new Array(mondayTtl, tuesdayTtl, wednesdayTtl, thursdayTtl, fridayTtl, saturdayTtl, sundayTtl);
  var weekHoursTtl = addArray(weekHours); //CAPTURE

  var sortWeekArray = ArrayLib.sort(weekArray, 0, true)

  var approve = SpreadsheetApp.getActive().getSheetByName('Approve');
  approve.getRange('D1').setValue(sortWeekArray);
  }
我想合并col1中的like项,并对col2中的like值求和,我想在输出结果之前在javascript中这样做

因此,样本输出将变成:

ESL               | 2
-------------------------
Parent Engagement | 8
-------------------------
School Liaison    | 16.25
-------------------------
Tutoring          | 11.75
-------------------------
Unclaimed         | 2.5
-------------------------
Volunteer Svcs    | 2
有什么想法吗?我已经在使用了,但这些函数似乎都不符合要求

weekArray看起来像:
{“category”,val;“category”,val;…}


此外,任何关于代码的想法都是受欢迎的。

因此,我从未找到JS解决方案,而且我似乎已经让So社区的至少21名成员感到困惑,但我最终做了以下工作:

  • 收集小时和类别的数组,如
    var weekArray=new array()所示和上面的后续循环(生成上面的第一个表)
  • 将它们转储到一个单独的工作表上的两列中:
    lkup.getRange('D2').setValue(weekArray)
  • 在单独的表格中为每个类别使用SUMIF函数
    =SUMIF($D$2:$D$43,“志愿者SVC”、$E$2:$E$43)
  • 使用JS:
    var categoriesArray=lkup.getRange('F2:K3').getValues()收集新的SUMIF'd数组
  • 从那里开始


    我仍然相信有更好的方法(还有一些干衣机),但我没有找到,你也没有发布。你可以随时留下评论。

    我相信有更好的方法,但这是有效的。我用你的示例数据进行了测试

    function getData(){
      var sheet = SpreadsheetApp.getActiveSheet();
      var lr=sheet.getLastRow();
      var data = sheet.getRange(2,1,lr-1,2).getValues();
      var data=data.sort();
      data.push(["",""]);
      sumValues(data,lr)
      } 
    
    function sumValues(data,lr){  
     var newData = new Array();
     for(var i=1;i<lr;i++){
     if(data[i-1][0] == data[i][0]){  
     data[i][1]=parseFloat(data[i][1])+parseFloat(data[i-1][1]); 
     newData.push([data[i][0],data[i][1]]);
     i=i+1.
     }
    else if(data[i-1][0] !== data[i][0]){  
    newData.push([data[i-1][0],data[i-1][1]])};
     }
    newData.push(["",""]);  
    dupcheck(newData);
    }
    
    function dupcheck(data){
    var dup=0;
    var lr=data.length;
    var l=data.length-1;
    for(var i=0;i<l;i++){
    if(data[i+1][0] == data[i][0]){
    var dup =dup+ 1};
    }
    if(dup>0){
    sumValues(data,lr)
    }
    else{   
    var sheet = SpreadsheetApp.getActiveSheet();
    var lr = sheet.getLastRow();
    sheet.getRange(2, 1, lr,data[0].length).clear({contentsOnly:true});
    sheet.getRange(2, 1, data.length,data[0].length).setValues(data);
    }}
    
    函数getData(){ var sheet=SpreadsheetApp.getActiveSheet(); var lr=sheet.getLastRow(); var数据=sheet.getRange(2,1,lr-1,2).getValues(); var data=data.sort(); 数据推送([“”,“”]); sumValues(数据,lr) } 函数sum值(数据,lr){ var newData=newarray(); 对于(var i=1;i
    function getData(){
      var sheet = SpreadsheetApp.getActiveSheet();
      var lr=sheet.getLastRow();
      var data = sheet.getRange(2,1,lr-1,2).getValues();
      var data=data.sort();
      data.push(["",""]);
      sumValues(data,lr)
      } 
    
    function sumValues(data,lr){  
     var newData = new Array();
     for(var i=1;i<lr;i++){
     if(data[i-1][0] == data[i][0]){  
     data[i][1]=parseFloat(data[i][1])+parseFloat(data[i-1][1]); 
     newData.push([data[i][0],data[i][1]]);
     i=i+1.
     }
    else if(data[i-1][0] !== data[i][0]){  
    newData.push([data[i-1][0],data[i-1][1]])};
     }
    newData.push(["",""]);  
    dupcheck(newData);
    }
    
    function dupcheck(data){
    var dup=0;
    var lr=data.length;
    var l=data.length-1;
    for(var i=0;i<l;i++){
    if(data[i+1][0] == data[i][0]){
    var dup =dup+ 1};
    }
    if(dup>0){
    sumValues(data,lr)
    }
    else{   
    var sheet = SpreadsheetApp.getActiveSheet();
    var lr = sheet.getLastRow();
    sheet.getRange(2, 1, lr,data[0].length).clear({contentsOnly:true});
    sheet.getRange(2, 1, data.length,data[0].length).setValues(data);
    }}