0

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

我有一个 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
4

1 回答 1

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);
}

在此处输入图像描述

于 2013-07-24T23:20:14.580 回答