我用过:
SpreadsheetApp.getActiveSheet().getRange(... some Range ...).getValues();
将电子表格单元格中的字符串存储到数组中。然后将字符串与其他字符串进行比较,但即使值相同,比较(使用==)也总是失败。
Browser.msgBox("is '"+topPlayerNames[j]+"' == '"+name+"'? "+(topPlayerNames[j] == name));
// displays:
is 'Data' == 'Data'? false
为什么javascript比较失败?单元格值中隐藏的格式是否会破坏比较?
答案 0 :(得分:1)
因为getRange()会给你一个二维数组,通过解释它们就像
var values = SpreadsheetApp.getActiveSheet().getRange(... some Range ...).getValues();
Browser.msgBox(values);
只是以您预期的方式输出数据,并且完全不匹配。不匹配的原因是您的变量容器保持
values = [['a','b',...],['d','f',....]]
。因此,当您要求输出数据时,它将输出数据。但比较时,
Does [['a','b',...]] == 'a','b',... ?? The answer is it is not.
因此,您需要从阵列中获取数据以与其他人进行比较。在这种情况下,使用值[0] [0]得到'a'(在我的例子中)或得到'd',值[1] [0] ....等等。您知道元素编号在javascript数组中以0开头。 :)
现在你可以比较它们了。所以值[0] [0] =='a'将输出TRUE(在我的例子中)
但是你没有提到什么是topPlayerNames [j],如果它也像上面的值,那么你也需要以解释的方式考虑它。
(你的问题变量有限。所以在解释时我需要写更多。下次请用相应的变量给出一些解释的问题。使用短变量进行长语句。这将有助于以简单的方式回答。)< / p>
答案 1 :(得分:0)
请参阅What is the correct way to check for string equality in JavaScript?
我会用 topPlayerNames [j] .equals(name)
我从不信任==使用字符串,因为它经常导致错误。