私は非常に奇妙な未定義のエラーを受け取っています:
function login(name,pass) {
var blob = Utilities.newBlob(pass);
var passwordencode = Utilities.base64Encode(blob.getBytes());
var ss = SpreadsheetApp.openById("");
var sheet = ss.getActiveSheet();
var data = sheet.getDataRange().getValues();
var i=1;
while (name != data[i][0]){
Logger.log(data[i][0]);
i++;
}
if (passwordencode == data[i][1]){
UserProperties.setProperties({
"name" :name,
"pass" : passwordencode
});
Logger.log("You are logged in");
}
else if (passwordencode != data[i][1]) {
Logger.log("You are not logged in");
UserProperties.setProperties({
"name" : "",
"pass" : ""
});
}
}
googlescriptを使用します。未定義のものは、while(name!= data [i] [0])がundefinedからプロパティ "0"を読み取れないと主張するwhileステートメントです。これについて奇妙なのは、whileステートメントでdata [i] [0]を削除しても、logger.logで機能することです。そして他のどこでも。一体何が起こっているのですか?
編集:whileをifステートメントに変更すると、それも機能します。
Whileはiをインクリメントします。だからあなたは得る:
data[1][0]
data[2][0]
data[3][0]
...
nameはデータのどの要素とも一致しないようです。したがって、whileはまだ増分され、配列の最後に到達します。 forループを使用することをお勧めします。
あなたがしようとしていることは、「データ」配列内の未定義値のプロパティ「0」にアクセスしているように見えます。 whileステートメントを見ると、ループごとに「i」を1増やしているため、これが起こっているようです。したがって、最初は「data [1]」にアクセスしますが、次のループでは、配列の長さに関係なく「data [2]」などにアクセスします。これにより、「名前」に等しいプロパティ「0」を持つ配列内の項目が見つからない場合、最終的に未定義の配列要素にヒットします。
While文をこれに修正します...
for(var iIndex = 1; iIndex <= data.length; iIndex++){
if (data[iIndex][0] === name){
break;
};
Logger.log(data[i][0]);
};
配列インデックスをチェックして、範囲外でアクセスされているかどうかを確認します。
カテゴリにアクセスしたら[0]。後でアレイ名をカテゴリからカテゴリに変更しましたが、アクセスポイントを変更するのを忘れていました。つまり、categories [0]からcategory [0]に変更したため、このエラーも発生します。
JavaScriptは貧弱なデバッグメッセージを行います。あなたの場合、おそらくアクセスが範囲外になると思います。
通常の状況では、エラーが発生すると配列の範囲外になります。したがって、配列の添え字を確認してください。