CSV字符串(拆分)到数组奇异等式行为

时间:2013-07-24 21:29:47

标签: javascript arrays csv split google-apps-script

更新 - 似乎这可能是本地化的错误。将进行进一步测试以验证...

我有一个CSV字符串(带空格),如下所示:

var myString = "Here is a value, I am an important value, One last value"

我使用var myArray = myString.split(", ")将String拆分为String数组。因此myArray中的值如下:

// myArray[0] = "Here is a value"
// myArray[1] = "I am an important value"
// myArray[2] = "One last value"

现在,我在if中使用一个简单的for loop语句来评估“我是一个重要的值”是否在CSV字符串中就像这样:< / p>

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()==“我是一个重要的值”)

奇怪的是, 值包含在CSV字符串中,它们正确分开(没有尾随空格等),但条件不返回 true 出于某种原因。有谁知道我有什么隐藏的东西吗?我故意使用==以便进行类型转换。 ===对结果没有任何影响。它会遍历myArray中的每个元素,并在看到值时将myBool标记为 true ,所以我很难理解为什么它不能立即工作

偶然更离奇的事情是,我计算了myArray中每个元素的字符,并将它们与输入字符串相匹配。它们完全匹配,角色的性格。那么为什么平等行为不正确呢?

PS - 关于这个问题的真的非常非常奇怪的是我在函数的前面有相同类型的方法,具有相同的输入类型并且它工作得很好。如果我这样做,例如从原始CSV字符串中删除“这是一个值”,则满足条件并且myBool变为真(似乎与比较值一样长)是 1st 元素,那么条件成立;否则,它不会。)

PPS - 原始CSV字符串中的各个值绝不会包含逗号,因此myString.split(", ");适用于我正在做的事情。

UPDATE :我将该函数分离到自己的脚本文件中,然后对其进行测试。这就是奇怪的行为(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

1 个答案:

答案 0 :(得分:0)

您的代码也可以在GAS中运行,正如您所说这是使用直接的javascript ...问题必须在其他地方。

测试GAS功能:

var myString = "Here is a value, I am an important value, One last value",
    myArray = myString.split(", "),
    myBool = false;
function test(){
for (var i = 0; i < myArray.length; ++ i) {
    if (myArray[i] == "I am an important value") {
        myBool = true;
        break;
    }
  }
Logger.log(myBool);
}

enter image description here