javascript - 比较 Google Apps 脚本中的数组值

标签 javascript arrays google-apps-script google-sheets

我觉得以下两个函数应该产生相同的结果,但函数 bob() 永远不会找到 name1 等于 name2,甚至尽管这些单元格中的名称确实是相同的。

函数 bob2() 工作正常,但我试图通过使用数组来加快速度。

function bob() 
{
  var ss = SpreadsheetApp.getActiveSheet();
  var name1 ;
  var name2 ;
  var AthName = ss.getRange(1,2,30).getValues();

  for (var xx=1; xx<30 ;xx++)
  {
    name1=AthName[xx]
    name2=AthName[xx+1]
  //name1 never equals name2 here. 
    if (name1==name2) ss.getRange(xx,10).setValue(name2);
  }
}


function bob2() 
{
  var ss = SpreadsheetApp.getActiveSheet();
  var name1 ;
  var name2 ;

  for (var xx=1; xx<30 ;xx++)
  {
    name1 = ss.getRange(xx,2).getValue();
    name2 = ss.getRange(xx+1,2).getValue();
  //name1 does equal name2 here as expected.
    if (name1==name2) ss.getRange(4+xx,10).setValue(name2);
  }
}

bob() 有什么问题吗?

最佳答案

bob() 的问题在于您将 AthName 设置为二维值列表:

var AthName = ss.getRange(1,2,30).getValues();

Range.getValues() 始终返回按行和列索引的二维列表。

这意味着您要将列表分配给 name1name2:

name1=AthName[xx]
name2=AthName[xx+1]

只有当列表是相同的列表时,列表才是相等的,,变量引用相同的内存位置。因此,无论列表包含什么,name1 == name2 都将是 false。

现在您可能已经很清楚修复方法了。从每一行检索值:

name1 = AthName[xx][0];
name2 = AthName[xx+1][0];

(为了良好的 JavaScript 风格,我添加了空格和分号。)

关于javascript - 比较 Google Apps 脚本中的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222594/

相关文章:

javascript - 如何在 GAS 功能真正结束后运行功能?

google-apps-script - 在谷歌应用程序脚本 MailApp.sendEmail 中使用抄送和/或密送

javascript - 使用 React 从列表中删除元素

C - 将数组划分为线程并使用并行性找到最大数量

javascript - 使 console.log 在 Google Chrome 中同步工作

C++11:正确的 std::array 初始化?

javascript - 获取数组中出现次数相同(最高)的所有元素

javascript - 使用 Google 表格创建嵌套 JSON 对象

php - 使用 https 确保 html 表单安全

javascript - 创建相同大小的弧,其上具有不同的标签/文本