【发布时间】:2013-07-24 21:29:46
【问题描述】:
更新 - 这似乎是一个本地化的错误。将做进一步的测试以验证...
我有一个 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"
现在,我在 for loop 中使用简单的 if 语句来评估 “我是一个重要的价值” 是否在该 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 an important value")
奇怪的是值 is 包含在 CSV 字符串中,它们被正确分隔(没有尾随空格等),但条件不返回 true 出于某种原因。有谁知道我是否缺少一些隐藏的东西?我故意使用== 以便它进行类型转换。 === 对结果没有影响。它会遍历myArray 中的每个元素,并在看到值后立即将myBool 标记为true,所以我很难理解为什么它不能立即工作。
更更奇怪的事情是我统计了myArray中每个元素的字符并将它们与输入字符串匹配。它们完全匹配,一个字符一个字符。那么为什么相等的行为不正确呢?
PS - 我遇到的这个问题的真的真的奇怪的是,我在函数的前面有相同类型的方法,具有相同的确切输入类型,它工作得很好.例如,如果我要从原始 CSV 字符串中删除 "Here is a value",则满足条件并且 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
【问题讨论】:
-
它工作正常:jsfiddle.net/sKkdT/1,所以我敢打赌编码或类似的东西有些奇怪?
-
嗯,确实缺少 Google 文档,所以我找不到任何关于他们用于 Google Apps 脚本的特定 Javascript 实现(这是我正在使用的)。据我所知,
String.split()是一个原生 Javascript 函数,所以理论上它应该像 @Ian 的 JSFiddle 一样工作......正如我在原始帖子中所说,如果我正在寻找的值是 索引0处数组的第一个元素,脚本有效。但否则它会失败。可能有某种我缺少的隐藏索引优势复合体?我认为这应该可行,但谷歌......伙计...... -
WRT 正在使用哪个 Javascript 实现:This answer 链接到 Google 文档中声称 ECMAScript 5 / js 1.8 的部分。
-
感谢 Mogsdad,已加入书签 :)
标签: javascript arrays csv split google-apps-script