我的一个Google电子表格脚本中存在问题。 在脚本中我创建了两个数组,第一个包含工作表中的一列:
var sheet_data = sheet.getRange('C1:C').getValues(); // for example sheet_data = [[""],["text1"],["text2"],[""],["text3"]]
,第二个是硬编码的:
var sheet_names = [["text1"],["text2"],["text3"]];
sheet_data包含sheet_names中存在的所有元素,我有一个while函数,它在sheet_data中找到一个特定元素(比如text1):
i = 0;
while (sheet_data[i] != sheet_names[1]) { i++; }
简而言之,我想在列C中找到包含特定字符串的单元格。然而,包含这种情况的循环由于某种原因不起作用。循环一直持续但我永远不会增加。我尝试使用包含if语句的for循环,但包含上述条件的if语句也失败了。我假设条件肯定有问题,但如果我明确检查应该相同的数组元素,它可以工作:
if (sheet_data[i] == "text1" && sheet_names[1] == "text1") // this works
为什么两个阵列元素的直接比较不起作用?
答案 0 :(得分:0)
这对我来说更像是一个JavaScript问题(我不熟悉Google Script风格,但应该应用相同的逻辑)
您正在尝试sheet_data[i] != sheet_names[1]
,其中sheet_data[i]
和sheet_names[1]
都是['text1']
。在JS中,这些是两个不同的数组对象(不是相同的引用),因此它们永远不会彼此相等。 (与Python不同)
你的第二个解决方案工作的原因甚至是琐碎的:当你执行['test1'] == 'test1'
时,因为2个元素属于不同的类型,JavaScript会尝试将它们转换为相同的类型,因为你使用{{ 1}}而不是==
。 ===
的字符串化版本正好是['test1']
,导致您的第二个解决方案正常运行。
见下面的例子:
'test1'