【问题标题】:Google sheet custom function: Reading arrays in the script vs passing from a sheetGoogle 工作表自定义函数:读取脚本中的数组与从工作表中传递
【发布时间】:2022-12-18 00:19:09
【问题描述】:

我是 javascript 的新手。我玩得很开心。

我很困惑,如果我在 google 工作表中的自定义函数中传递一个数组,我会在一个数组中得到不同维度的数组。跨 5 列读取会得到一个包含 5 个元素的数组,其中一个数组包含 1 个元素。如果我向下读取 5 行,我会在一个数组中得到一个包含 5 个元素的数组。

传递的数组中所有内容的引用要么是:Array[0][2] 要么是 Array[2][0],具体取决于传递数组的方式。

我可以在脚本中处理这个问题,但是有相当多的代码行带有条件,并且对于每个传递的数组。我不敢相信这是必要的。常规函数(例如:sum(a1:a5 vs sum(a1:e1)) 对传递的数组无动于衷,我不敢相信它们都必须这样做。

我想有一种比我已经做过并且很想知道的更简单的方法来处理这个问题。 谢谢。

这就是我现在处理它的方式。values [] 是从自定义函数传递过来的。 (就像我说的,我是新手)

`var NuValues = []
if (values.length <=1 && values[0].length <=1){  
    return 'more than one value required'
} else if(values.length>1 && !Array.isArray(values[0])){
      // already a 1d array and can be handled 
       NuValues = values.slice()
}  else if (values.length ==1 && values[0].length >1){
      //read across columns, read to a flat array
      //read values across columns
      NuValues = values[0].slice()
  
} else if (values.length>1 && values[0].length == 1){
      //(read values down a column
      for(i=0; i<=values.length-1;i++){
         NuValues.push(values[i][0])
      }
}
console.log(NuValues)

【问题讨论】:

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


【解决方案1】:

要获取包含二维数组中所有值的一维数组,请使用 Array.flat(),如下所示:

  values = values.flat();

您也可以将其安全地用于一维数组。

要使其在 values 不是数组而是单个值的情况下工作,请使用:

  if (Array.isArray(values)) {
    values = values.flat();
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多