Arrays 在Google脚本中使用多维数组

Arrays 在Google脚本中使用多维数组,arrays,multidimensional-array,google-apps-script,google-sheets,Arrays,Multidimensional Array,Google Apps Script,Google Sheets,我有一张表格,第一行是天数。第二行和第三行是不同公司在这些天数内的每日产量。是这样的。 我的要求是在2D数组中获取天数行和特定公司生产详细信息行 这是我的密码 function GetData() { myFunction("Konabay"); } function myFunction(Company) { var dSheet = SpreadsheetApp.getActiveSpreadsheet(); var aSheet= dSheet.getSheet

我有一张表格,第一行是天数。第二行和第三行是不同公司在这些天数内的每日产量。是这样的。

我的要求是在2D数组中获取天数行和特定公司生产详细信息行

这是我的密码

function GetData()
 {
  myFunction("Konabay");
 }

 function myFunction(Company)
 {
   var dSheet = SpreadsheetApp.getActiveSpreadsheet();
   var aSheet= dSheet.getSheetByName("Data");
   var range = aSheet.getDataRange();
   var values = range.getValues();
   var VNeeded=[];

   for (var i = 0; i < values.length; i++) 
   {
   //var row = "";
   var companyCheck="No";

   for (var j = 0; j < values[i].length; j++) 
     {
       if (values[i][j]) 
         {
           if (i==0)//Need the first row(days) in my new array always
           {
             VNeeded[i,j]=values[i][j];
             Logger.log("VNeeded i=0 (0,3) = "+ VNeeded[0,3]);
             Logger.log("VNeeded i=0(1,3)= "+ VNeeded[1,3]);
             //row = row + values[i][j];
           }
           else if (i>0)//From second row onwards check for the company needed
           {
             if(values[i][0]==Company)
             {
               companyCheck="Yes";
             }
             if(companyCheck=="Yes")
             {
               VNeeded[i,j]=values[i][j];
               Logger.log("VNeeded i>0 (0,3) = "+ VNeeded[0,3]);
               Logger.log("VNeeded i>0 (1,3)= "+ VNeeded[1,3]);
               //row = row + values[i][j];
             }
           }

         }
      //row = row + ",";
     }
      //Logger.log(row);

 }
}
那么我哪里弄错了?? 当我将值设置为VNeeded[1,3]时,也会将相同的值设置为其他维度(VNeeded[0,3])。这怎么可能

请帮我摆脱这个问题

我怎样才能得到想要的结果。我做错了什么

我的测试表链接为:

请帮忙

Logger.log(JSON.stringify(VNeeded)) gives this result :  ["Konabay",2.5,4,5,5]

在JavaScript中,
VNeeded[i,j]
计算为
VNeeded[j]
,因为

改用
v所需的[i][j]

VNeeded[i][j]=values[i][j];

我必须粘贴代码才能意识到这个问题。

您对所需[I,j]的数组位置的引用并没有给您预期的结果。实际上,您正在将一个位置整数数组传递到
VNeeded
中,该数组将解析为最后一个数字。即
VNeeded[j]

改用
v所需的[i][j]

VNeeded[i][j]=values[i][j];
然而

这将在代码中抛出一个错误,因为您试图在“j”位置输入值的位置i的“数组”不存在。因此,如果需要,您需要使用数组预先填充位置:

VNeeded[i] = VNeeded[i] || [];
VNeeded[i][j] = values[i][j];
然而

要获得所需的结果,请执行以下操作:

VNeeded[i] = VNeeded[i] || [];
VNeeded[i][j] = values[i][j];
[10,2.5]、[30,4]、[40,5]、[30,5]

您需要在行条件检查的两个部分将
vneed[i][j]
切换到
vneed[j][i]

VNeeded[j] = VNeeded[i] || [];
VNeeded[j][i] = values[i][j];
因为您正在尝试的实际上是一个轴上的过滤器,所以通过执行轴,首先检查公司在列表中的位置并以这种方式返回结果对,您的代码可以大大简化:

function getData(company) {

  var dSheet = SpreadsheetApp.getActiveSpreadsheet();
  var aSheet= dSheet.getSheetByName("Data");
  var range = aSheet.getDataRange();
  var values = range.getValues();
  var vNeeded=[];
  var pivotedData = []; // Used to carry the transposed data

  for (var i = 0, l = data.length; i < l; i += 1) {
    for (var j = 0, k = data[i].length; j < k; j += 1) {    
      pivotedData[j] = pivotedData[j] || []; // allows for entry into preexisting array.
      pivotedData[j][i] = data[i][j];
    }
  }

  var companyIndex = pivotedData[0].indexOf(company); // find company in the list

  if (companyIndex < 0) return; // There is no matching company, returns undefined

  for (var i = 1, l = pivotedData.length; i < l; i += 1) { 
    vNeeded[i-1] = [pivotedData[i][0], pivotedData[i][companyIndex]]; // [expected,found]
  }
  return vNeeded;
}
函数getData(公司){ var dSheet=SpreadsheetApp.getActiveSpreadsheet(); var aSheet=dSheet.getSheetByName(“数据”); var range=aSheet.getDataRange(); var values=range.getValues(); var vneed=[]; var pivotedData=[];//用于携带转置的数据 对于(变量i=0,l=data.length;i
Logger.log(JSON.stringify(VNeeded))给出以下结果:[18-01-29 17:43:17:975 IST][“Konabay”,2.5,4,5,5]一旦选定公司的行结束,当循环移到顶部时,变量将被重新清除为默认值“否”。所以这似乎不是问题。真的谢谢你。这非常有帮助