如何在自定义函数中正确使用map方法提取二维数组指定列
你遇到的报错和.map方法本身的使用无关,错误是你在Google Apps Script编辑器中直接执行selectCol函数导致的:运行时没有给函数传入data和n两个参数,函数内部的data变量值为undefined,调用undefined的map方法自然会抛出该错误。
你封装的selectCol函数逻辑完全正确,不需要调整,只需要新增一个入口测试函数,把测试调用的逻辑放到这个函数里即可:
// 原有提取列函数,无需修改 function selectCol(data,n){ return data.map(function(column){ return [column[n]] }) } // 新增入口测试函数,所有测试逻辑都放在这里 function testSelectCol() { var array1 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]; Logger.log(selectCol(array1,2)); }
后续运行时,在Google Apps Script编辑器顶部的函数下拉列表里,选中testSelectCol作为主函数再执行,就不会出现报错,日志会输出预期的取列结果[[3], [6], [9], [12]]。你提到的dummy函数本质就是这类不需要传参的入口执行函数。
如果要适配更复杂的业务场景,避免传入非数组或者列号越界的报错,可以给函数加一层防御判断:
function selectCol(data,n){ // 传入参数不是数组直接返回空数组 if(!Array.isArray(data)) return [] return data.map(function(item){ // 对应列不存在时返回null占位,避免下标越界错误 return [item[n] ?? null] }) }
内容的提问来源于stack exchange,提问作者Kim Hopkins
相关产品推荐
相关产品推荐

