我觉得以下两个函数应该产生相同的结果,但函数 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()
始终返回按行和列索引的二维列表。
这意味着您要将列表分配给 name1
和 name2
:
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/