比较Google Apps脚本中的数组值

时间:2015-08-26 09:17:33

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

我觉得以下两个函数应该产生相同的结果,但函数bob()永远不会发现name1等于name2,即使这些单元格中的名称确实相等。 / p>

函数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()有什么问题?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

列表只有在它们是相同的列表时才相等,,变量指的是相同的内存位置。因此,无论列表包含什么,name1 == name2都将是假的。

此修复程序现在可能很明显。从每行检索值:

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

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