如何用reduce重构Google Sheets批量正则替换函数以处理整数组
重构批量正则替换函数以支持二维数组处理
原函数仅支持单列数据的批量正则替换,现需重构为可遍历处理整个二维数组的版本,同时保留原有的规则集中管理、空值跳过优化特性。
原单列处理函数
function processColumn(column) { // Add more as needed: // [Regex, Replacement] let replaceTable = [ [/\bN\./g, 'North'], [/\bS\./g, 'South'], [/\bSt\./g, 'Street'] ]; // A column is an array of rows // A row is an array of values. return column.map(row => // This is an optimization to skip over blank values row[0] ? replaceTable.reduce( // Replace one value at a time, in order (curString, tableEntry) => curString.replaceAll(tableEntry[0], tableEntry[1]), row[0] ) : '' ); }
重构后的二维数组处理函数
function processArray(array) { // 集中管理替换规则,新增/修改只需在此处操作 const replaceTable = [ [/\bN\./g, 'North'], [/\bS\./g, 'South'], [/\bSt\./g, 'Street'] ]; // 遍历外层数组(行),再遍历内层数组(列单元格) return array.map(row => row.map(cell => // 空值直接返回,避免不必要的处理 cell ? replaceTable.reduce( (current, [regex, replacement]) => current.replaceAll(regex, replacement), cell ) : '' ) ); }
改动说明
- 函数命名:从
processColumn改为processArray,更贴合功能定位 - 多层遍历:使用嵌套
map,先遍历每一行(外层map),再遍历行内每个单元格(内层map) - 规则复用:保留原有的
replaceTable集中管理模式,新增替换规则只需在数组中添加项,无需修改遍历逻辑 - 空值优化:延续原函数的空值跳过处理,避免对空白单元格执行替换操作
- 参数解构:在
reduce回调中使用数组解构[regex, replacement],让代码更易读
使用示例
和你提到的链式replaceAll实现相比,重构后的函数更易于维护:
// 获取表格数据 const values = sheet.getDataRange().getDisplayValues(); // 处理整个二维数组 const processedValues = processArray(values); // 将处理后的数据写回表格(可选) sheet.getDataRange().setValues(processedValues);
内容的提问来源于stack exchange,提问作者xyz333
相关产品推荐
相关产品推荐

