Google Sheets自定义函数数组维度不一致的简化处理方法问询
简化Google Sheets自定义函数的数组扁平化处理
你当前用多段条件判断来处理横向/纵向传入的二维数组,其实可以用数组扁平化的方式彻底简化代码,和Google Sheets内置函数的逻辑对齐,不用再区分不同的传入方式。
最简实现(利用原生API)
Google Apps Script支持ES6的flat()方法,直接用它就能把任意嵌套的数组转成一维:
function yourCustomFunction(values) { // 把所有嵌套数组彻底扁平化 const flatValues = values.flat(Infinity); // 处理单个值的情况 if (flatValues.length <= 1) { return 'more than one value required'; } // 后续直接操作flatValues这个一维数组即可 console.log(flatValues); // 这里写你的业务逻辑 }
不管是横向选5列得到的[[val1, val2, val3, val4, val5]],还是纵向选5行得到的[[val1], [val2], [val3], [val4], [val5]],flat(Infinity)都会把它们转成[val1, val2, val3, val4, val5],之后直接用索引flatValues[2]就能取到对应值,不用再区分Array[0][2]或Array[2][0]。
兼容性备选方案(手动实现扁平化)
如果担心环境兼容性(虽然Google Apps Script目前完全支持flat),可以自己写一个扁平化函数:
function flattenArray(arr) { return arr.reduce((result, item) => { return result.concat(Array.isArray(item) ? flattenArray(item) : item); }, []); } // 在自定义函数里使用 function yourCustomFunction(values) { const flatValues = flattenArray(values); if (flatValues.length <= 1) { return 'more than one value required'; } console.log(flatValues); // 业务逻辑代码 }
为什么内置函数不用处理?
Google Sheets的内置函数(比如SUM)内部已经做了自动扁平化处理,所以不管你横向还是纵向选数据,它都能直接识别所有数值。我们自己实现扁平化,就是对齐这个逻辑,避免冗余的条件判断。
内容的提问来源于stack exchange,提问作者John Barton
相关产品推荐
相关产品推荐

