JavaScript/GAS多变量赋值:从二维数组提取变量是否有更简洁写法?
代码最优实现方案
你当前的写法可以正常运行,但可以进一步精简,省略中间的result变量和单独的forEach遍历步骤,直接用map方法提取每行第一个元素后解构赋值,是更简洁的通用实现,性能和原写法无差异:
function testAssignments(){ const config = ss.getRange("C2:C6").getValues();// 二维数组 const [a,b,c,d,e] = config.map(x => x[0]); console.log(a,b,c,d,e); }
额外提示:原代码中的config、result没有加变量声明关键字,会自动挂载为全局变量,建议补充const/let声明更规范。
config.forEach(x=> x=x[0])不生效的原因
这是由JS函数参数的按值传递规则导致的:
- 遍历过程中拿到的回调参数
x,只是原数组中对应子数组的引用副本 - 执行
x = x[0]时,你只是修改了局部变量x的指向,将其从指向子数组改为指向子数组第一个元素的值,这个修改完全不会影响原config数组的内容 - 如果你需要通过
forEach修改原数组,要通过索引操作原数组本身:
config.forEach((x, index) => config[index] = x[0])
内容的提问来源于stack exchange,提问作者J. G.
相关产品推荐
相关产品推荐

