2013-11-29 51 views
1

我想查看一個由B2,B3,B4,B5定義的名稱列表,直到B99,並與另一個集名稱(walkname)進行比較如果walkname在列表中,它被評估爲true,除瀏覽器彈出窗口外沒有任何事情發生。如果它被評估爲false,則新名稱將被添加到最後一行。下面的代碼有效,但我不想定義到B99。什麼是最快捷的方式來執行此操作並使用||與此同時?定義多個變量並與OR運算符進行比較

var B2 = sstracker.getRange('B2').getValue(); 
var B3 = sstracker.getRange('B3').getValue(); 
var B4 = sstracker.getRange('B4').getValue(); 
var B5 = sstracker.getRange('B5').getValue(); 

if (walkname == B2 || walkname == B3 || walkname == B4 || walkname == B5) 
{Browser.msgBox(true)} 
else {var row1 = sstracker.getRange(sstrackerLastRow + 1, 2, 1, 1).setValue(walkname).setBackground('Red');} 

我半知道如何使用下面的代碼,並試圖用它來做與上面相同的事情。唯一的問題是,它一次評估一個,而不是查看所有實例並使用OR語句。基本上,新名稱總是被添加到列表中,除非它是第一個。我是一個NOOB,並意識到可能有一個真正簡單的答案,使下面的代碼執行上述代碼。我已經搜索論壇,但不知道甚至尋找什麼來獲得這方面的幫助。請幫助!當你回答時,儘量保持簡單。

for(var i = 0; i < teacherarray.length; i++){ 
var teachname = teacherarray[i]; 
    if(teachname == walkname){break} 
    else {var row1 = sstracker.getRange(sstrackerLastRow + 1, 2, 1, 1).setValue(walkname).setBackground('Red');} 

回答

0

你可以用contains

function contains(a, obj) { 
    for (var i = 0; i < a.length; i++) { 
     if (a[i] === obj) { 
      return true; 
     } 
    } 
    return false; 
} 

// ... 

if (contains(teacherarray, walkname)) 
{ 
    // do something 
} 
else 
{ 
// do something else 
} 

編輯:複製& paste'd的包含功能

+0

我結束了使用包含公式,但有約45分鐘的問題得到它的工作。我必須將===更改爲==才能使其工作。根據這裏的另一篇文章,當兩個字符串在相同位置具有相同的字符序列,相同的長度和相同的字符時嚴格相等時,===是正確的。我比較的名字是相同的,至少在非電腦術語中看起來完全相同。只要我改爲==它工作。你能解釋一下嗎? – HarrisCountyBOE

+0

也許getValue()的返回類型或walkname的類型不是字符串?請參閱[這裏](http://stackoverflow.com/a/359509/2228771)兩個區別的例子。 – Domi

0

我通常使用字符串函數來防止因大/小寫的差異錯誤.. 。

if (teacherarray.toString().toLowerCase().indexOf(walkname.toLowerCase())>-1){ 
    Logger.log('is already there'); 
    }else{ 
    Logger.log('must be created'); 
} 

full test:

function test(){ 
    var walkname = 'XMan'; 
    var teacherarray = SpreadsheetApp.getActiveSheet().getRange('B1:B').getValues(); 
    if (teacherarray.toString().toLowerCase().indexOf(walkname.toLowerCase())>-1){ 
    Logger.log('is already there'); 
    }else{ 
    Logger.log('must be created'); 
    } 
} 
+0

謝謝你的回答。我最終使用了下面的其他答案。確保案件不是問題是修復我的代碼的下一步,所以我將使用你的答案的一部分。 – HarrisCountyBOE