2013-11-29 1 views
1

B2, B3, B4, B5에서 B99까지 정의 된 이름 목록을보고 다른 집합 이름 (walkname)과 비교하려고합니다. 목록은 사실로 평가되고 브라우저 팝업을 제외하고는 아무 것도 발생하지 않습니다. 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 
} 

편집 : 복사 &는 기능

+0

나는 수식을 사용하여 끝났지 만 작동하려면 약 45 분 동안 문제가있었습니다. 나는 그것을 작동시키기 위해 === ==로 바꿔야 만했다. 여기에 또 다른 게시물에 따르면 ===는 두 문자열이 문자, 길이가 같고 해당 위치에있는 문자가 같은 경우 똑같이 true 인 경우 true입니다. 내가 비교하고있는 이름은 동일했다. 적어도 컴퓨터가 아닌 다른 용어에서는 동일하게 보였다. ==로 변경하자마자 효과가있었습니다. 설명해 주시겠습니까? – HarrisCountyBOE

+0

아마도'getValue()'의 리턴 타입이나 walkname의 타입이 string이 아니겠습니까? 이 둘의 차이점에 대한 예는 [here] (http://stackoverflow.com/a/359509/2228771)를 참조하십시오. – Domi

0

나는 보통 대문자/소문자 차이로 인한 오류를 방지하기 위해 문자열 함수를 사용을 포함 paste'd ..

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

전체 테스트 :

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