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"

ここで、 「私は重要な値です」がその CSV 文字列に含まれているかどうかを評価するために、次のように単純なifステートメントを使用しています。for loop

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を返していません。私が見逃している何かが隠されているかどうか誰か知っていますか? 意図的==に型変換を行うようにしています。===結果に違いはありませんでした。すべての要素を繰り返し処理し、値を確認するとすぐにtrueとしてmyArrayマークするため、すぐに機能しない理由を理解するのに非常に苦労しています。myBool

さらに奇妙なことは、各要素の文字を数えてmyArray、入力文字列に一致させたことです。それらは文字ごとに正確に一致します。では、なぜ等式が正しく動作しないのでしょうか?

PS-私が抱えているこの問題について本当に本当に本当に奇妙なことは、関数の前の方で同じタイプのアプローチを使用していて、まったく同じ入力タイプを使用していて、それがうまく機能することです。たとえば、元のCSV文字列から「ここに値があります」を削除すると、条件が満たされてtrueになります(比較値が最初の要素で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 に答える