更新- 这似乎是一个本地化的错误。将做进一步的测试以验证...
我有一个 CSV 字符串(带空格),看起来像这样:
var myString = "Here is a value, I am an important value, One last value"
我使用var myArray = myString.split(", ")
. 因此,其中的值myArray
如下:
// myArray[0] = "Here is a value"
// myArray[1] = "I am an important value"
// myArray[2] = "One last value"
现在,我在 a 中使用一个简单的if
语句for loop
来评估“我是一个重要的价值”是否在那个 CSV 字符串中,就像这样:
for (var i = 0; i < myArray.length; ++ i) {
if (myArray[i] == "I am an important value") {
myBool = true;
}
}
我也尝试过if (myArray[i] == 'I am an important value')
`if (myArray[i].toString() == "I am a important value")
奇怪的是,该值包含在 CSV 字符串中,它们被正确分隔(没有尾随空格等),但由于某种原因条件没有返回true 。有谁知道我是否缺少一些隐藏的东西?我故意使用==
它来进行类型转换。===
结果没有任何区别。它会遍历其中的每个元素,myArray
并在看到值后立即将其标记myBool
为真,因此我很难理解为什么它不能立即起作用。
更奇怪的是,我统计了每个元素的字符,myArray
并将它们与输入的字符串匹配。它们完全匹配,一个字符一个字符。那么为什么等式不能正确运行呢?
PS -我遇到的这个问题真正非常奇怪的是,我在函数的早期有相同类型的方法,具有相同的确切输入类型,它工作得很好。例如,如果我要从原始 CSV 字符串中删除“这是一个值”,则条件满足并myBool
变为真(似乎只要比较值是第一个元素,则条件成立;否则,它不是)。
PPS - 原始 CSV 字符串中的各个值永远不会有逗号,所以myString.split(", ");
适用于我正在做的事情。
更新:我将函数分离到它自己的脚本文件中,并对其进行了测试。这就是奇怪的行为所在(到底在String.split()
做什么?
/*
* This is how the data is set up in my script. There is an Object that has a property which is a String.
* The object itself is passed as a paramter, and I check the
*/
function start() {
var myObject = {
"property": "Here is a value, I am an important value, One last value",
"extra": false,
}
var result = stringSplitTest(myObject);
Logger.log("Result: " + result);
}
function stringSplitTest(someObject) {
var myBool = false;
var stringToSplit = someObject.property;
Logger.log(stringToSplit);
var array = stringToSplit.split(", ");
for (var i = 0; i < array.length; ++ i) {
Logger.log("Index " + i + ": " + array[i]);
if (array[i] == "I am an important value") {
myBool = true;
break;
}
}
return myBool;
}
记录输出:
[13-07-25 11:29:45:628 EDT] Here is a value, I am an important value, One last value
[13-07-25 11:29:45:628 EDT] Index 0: Here is a value
[13-07-25 11:29:45:628 EDT] Index 1: I am an important value
[13-07-25 11:29:45:628 EDT] Result: true