2012-05-29 3 views
0

this question에 응답하려고 시도하는 동안 이상한 동작이 발견되었습니다.유니온 함수 - 사용자 정의 함수에서 인수 전달 - Google 스프레드 시트

여기 내 코드입니다 :

function remove(val, array){ 
    var res = new Array(); 
    for(var i=0; i<array.length; i++){ 
    if(array[i] != val){ 
     res.push(array[i]); 
    } 
    } 
    return res; 
} 

//we assume that there is no duplicates values inside array1 and array2 
function my_union(array1, array2){ 
    var longuer; 
    var shorter; 
    var arrayRes = new Array(); 
    if(array1.length < array2.length){ 
    longuer = array2; 
    shorter = array1; 
    } else { 
    longuer = array1; 
    shorter = array2; 
    } 

    for(var i=0; i<longuer.length; i++){ 
    arrayRes.push(longuer[i]); 
    shorter = remove(longuer[i], shorter); 
    } 

    for(var i=0; i<shorter.length; i++){ 
    arrayRes.push(shorter[i]); 
    } 

    return arrayRes; 
} 

function test(){ 
    Browser.msgBox(my_union([1,2,3], [1,2])); 
} 

메시지 상자가 명확 1,2,3라고하지만 같은 값으로 스프레드 시트 내에서이 함수를 호출 할 때, 그것은 왜, 중복 된 값을 삭제하지?

** 편집 : ** 엔리케의 대답에 감사합니다, 여기에 코드입니다 :

function remove(val, array){ 
    var res = new Array(); 
    for(var i=0; i<array.length; i++){ 
    if(array[i] != val){ 
     res.push(array[i]); 
    } 
    } 
    return res; 
} 

function matFlattener(matrix){ 
    var array = new Array(); 
    for(var i=0; i<matrix.length; i++){ 
    for(var j=0; j<matrix[i].length; j++){ 
     array.push(matrix[i][j]); 
    } 
    } 
    return array; 
} 

function my_union(matrix1, matrix2){ 
    //assert no duplicate values in matrix1 and matrix2 
    var longuer; 
    var shorter; 
    var array1 = matFlattener(matrix1); 
    var array2 = matFlattener(matrix2); 
    var arrayRes = new Array(); 
    if(array1.length < array2.length){ 
    longuer = array2; 
    shorter = array1; 
    } else { 
    longuer = array1; 
    shorter = array2; 
    } 

    for(var i=0; i<longuer.length; i++){ 
    arrayRes.push([longuer[i]]); 
    shorter = remove(longuer[i], shorter); 
    } 

    for(var i=0; i<shorter.length; i++){ 
    arrayRes.push([shorter[i]]); 
    } 

    return arrayRes; 
} 
+0

정말로 묻고있는 것을 더 잘 반영하기 위해이 질문의 제목을 변경하십시오. –

+0

12 개 단어로 물어 보았습니다. – Zelwina

답변

1

당신은 스프레드 시트에서 사용자 정의 함수를 호출하고, 멀티 레인지 매개 변수를 전달하는 경우,이 매개 변수 것입니다 항상 단일 행이나 열을 전달하더라도 관계없이 행렬이됩니다.

스프레드 시트와 같은 행동이,이처럼 test 기능을 변경해야 않습니다 테스트하려면 :

function test() { 
    //note the "extra" brackets 
    Browser.msgBox(my_union([[1,2,3]],[[1,2]]); //passing "single" rows 
    Browser.msgBox(my_union([[1],[2],[3]],[[1],[2]]); //passing "single" columns 
} 

이 솔루션은 그것을 위해 계정에 my_union 공식을 조정합니다.