如何将二维数组转换为对象?(Google Sheets脚本场景)
解决方案:将二维数组转换为键值对对象
这里有几种简单高效的方法,能把你的folderIds二维数组转换成目标格式的对象,方便你用names数组中的名称直接取值:
方法1:使用reduce(推荐,功能灵活)
reduce方法可以直接遍历数组并累加出目标对象,是处理这类转换的常用方式:
const folderIdsObj = folderIds.reduce((acc, [name, id]) => { acc[name] = id; return acc; }, {});
- 逻辑:初始化一个空对象
{}作为累加器acc,遍历folderIds中的每个子数组,通过解构赋值直接取出name(子数组第一个元素)和id(子数组第二个元素),将键值对添加到累加器中,最后返回完成的对象。
方法2:使用forEach(直观易懂,适合新手)
如果觉得reduce有点抽象,用forEach循环逐个赋值更直白:
const folderIdsObj = {}; folderIds.forEach(row => { const name = row[0]; const folderId = row[1]; folderIdsObj[name] = folderId; });
- 逻辑:先创建空对象,然后遍历二维数组的每一行,把每行的第一个元素作为对象的键,第二个元素作为对应的值。
方法3:使用map + Object.fromEntries(简洁ES6+写法)
你提到了map方法,结合Object.fromEntries可以一行完成转换(Google Apps Script已支持该语法):
const folderIdsObj = Object.fromEntries( folderIds.map(row => [row[0], row[1]]) );
- 逻辑:
map把二维数组的每一行转换成[键, 值]的格式,再通过Object.fromEntries将这个数组直接转换成对象。
使用示例
转换完成后,你就可以像计划的那样通过名称取值:
for (let i = 0; i < names.length; i++) { const currentName = names[i]; const currentFolderId = folderIdsObj[currentName]; // 这里处理拿到的文件夹ID,比如操作Google Drive if (currentFolderId) { // 存在对应ID的逻辑 } else { // 名称未找到的处理逻辑,比如提示或跳过 } }
内容的提问来源于stack exchange,提问作者Rosie Muir
相关产品推荐
相关产品推荐

