Map() 函数未给出预期结果 Google 脚本

Map() function not giving expected results Google script

我正在尝试学习如何使用 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);
}

问题/解释:

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

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

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

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

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

解法:

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);
}