2016-12-29 5 views
0

配列に値が存在するかどうかを調べる方法がわかりません。私はこれが単純であるべきだと思ったが、そこには行けなかった。Google Appsスクリプトは配列内の値を見つけます

私はこのコードを持っている:

function findPlayer() { 
//This section gets the values from the first row of all the columns 
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Players"); 
var lastColumn = ss.getLastColumn() 
var playerNameRow = ss.getRange(1, 2, 1, lastColumn - 3); 
var playerNameValues = playerNameRow.getValues(); 

//This just sets the value we're looking for (which in this example is in the 7th Column "G"). And logs the Array, just to check it. 
var findPlayer = "Dan"; 
Logger.log(playerNameValues) 


//and here we just loop through the playerNameValues array looking for the findPlayer value 
for(var n in playerNameValues){ 
if(playerNameValues[n][0]== findPlayer) {break} 
} 

//and here, if the above search does find the matching value it should log it 
Logger.log(n); 
} 

playerNameValueが正しくログインされている何が起こっているのが、nは常に、それはむしろ列7よりも、それはチェックの最初の項目の値を見つけることだ意味を0としてログインしています値はどこにありますか。

+0

(https://developers.google.com/apps-script/articles/mail_merge)[メールチュートリアルをマージ]、特に完全なコードでは一部に注意を払う、この上のサンプルコードを見てみましょうgetRowsData()関数からセクションを削除します。データをオブジェクトに読み込む方法です。 playNameValues.player [n]を使用するか、ヘッダー行に表示されているものを使用できます。 –

答えて

1

私はあなたが、プレイヤーが何を実際にチェックしていること

行1列1 行2列1 行3列1

され、実際には決して手を触れないことを柱7.注意であることを述べ気づきますあなたが[0]if(playerNameValues[n][0]== findPlayer) {break}に持っているので、最初の列から離れた列。代わりにこれを行う

for (i = 0; i < playerNameValues.length; i++) { 
    for (n = 0; n < playerNameValues[i].length; n++) { 
    if (playerNameValues[i][n] == findPlayer) break 
    } 
    if (playerNameValues[i][n] == findPlayer) break 
} 

は、我々は第二のループから抜け出すための第2のブレークを行うが、そのコードを書くのより良い方法がある(私はあなたが var i、すでに var nを持っていると仮定)、これは何をilustrateするだけで、あなたする必要があります。

for(var n in playerNameValues[0]){ 
if(playerNameValues[0][n]== findPlayer) {break} 
} 

それとも別の方法のindexOfの代わりに、上記使用することです:

+0

ああ、意味があります。どうもありがとう! –

+0

私が書いたことは、行や列にはプレーヤー名を付けることができるということです。プレーヤーの名前がす​​べて特定の行にある場合、 '.getValues()'を使って取得した配列は 'array [row] [column]'を使ってアクセスします。だから、もしそれらがすべて行5にだけあれば、 'array [4] [col] 'をループすることもできます。 – Vytautas

+0

ああ、そうです。素晴らしい説明。ありがとう。 –

0

あなたの行と列を使用することは、逆になっています。

Logger.log(playerNameValues[0].indexOf(findPlayer)); 
関連する問題