首页 > 解决方案 > Map() 函数没有给出预期的结果谷歌脚本

问题描述

我正在尝试学习如何使用 Map(),在 Method1 下面的函数中,该函数运行,即它执行并且不会抛出错误,但它不会更改任何等于它的单元格值Networking - 1保持1数据不变

我不明白什么不起作用。

function Method1() {
  var ss     = SpreadsheetApp.getActiveSpreadsheet();  
  var sheet  = ss.getSheetByName('Elements');  
  var rng    = sheet.getDataRange();
  var values = rng.getValues();
  
  values = values.map(x => {return x = (x=="Networking - 1" ) ? 1: x;});

  sheet.getRange(1,1, values.length, values[0].length).setValues(values);
}

标签: javascriptgoogle-apps-scriptgoogle-sheetsmap-function

解决方案


问题/说明:

  • 问题是这values是一个2D数组,当您使用单个地图时,它 x代表一行。您不能将一行与单个值进行比较。将类似的东西['','','']与进行比较是没有意义的''。因此,您需要找到一种方法来获取此数组的每个元素并将其与字符串值进行比较。

  • 我的方法是在另一个地图函数中使用地图。第一个 map 将获取,第二个 map 将获取每行的元素并将它们与字符串进行比较:

    values = values.map(x => x.map(y=>y=="Networking - 1"  ? 1: y))
    

    x将是该行并将成为该行y中的一个元素。通过这种方式,您可以将元素与单个值进行比较"Networking - 1"

  • 当您在和其他类似的数组函数中使用单行时map,您不需要使用returnand {}。您还想返回返回值,而不是赋值操作。

解决方案:

function Method1() {
  var ss     = SpreadsheetApp.getActiveSpreadsheet();  
  var sheet  = ss.getSheetByName('Elements');  
  var rng    = sheet.getDataRange();
  var values = rng.getValues();
  values = values.map(x => x.map(y=>y=="Networking - 1"  ? 1: y))
                      
  sheet.getRange(1,1, values.length, values[0].length).setValues(values);
}

推荐阅读