我无法弄清楚如何检查数组中是否存在值。我认为这应该是简单的,但不能到达那里。
我有这段代码:
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总是记录为0.这意味着它在它检查的第一个项目中找到了值,而不是第7个值所在的值。
答案 0 :(得分:2)
我注意到你提到播放器是第7列。注意你实际检查的是
第1行第1列 第2行第1列 第3行第1列
除了if(playerNameValues[n][0]== findPlayer) {break}
var i
之外,实际上从来没有触及任何列。而是这样做(我假设你已经var n
和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
}
)
execute javascript "document.body.querySelector(\"div.users-list\").innerHTML"
我们做了第二次休息以突破第二次循环,但是有更好的方法来编写代码,这只是为了说明你需要做的事情。
答案 1 :(得分:1)
您的行和列是相反的,请使用:
for(var n in playerNameValues[0]){
if(playerNameValues[0][n]== findPlayer) {break}
}
或者另一种方法是使用indexOf而不是上面。
Logger.log(playerNameValues[0].indexOf(findPlayer));