2014-03-19 2 views
1

함수에 대한 매개 변수가있는 객체가 있습니다. 그러나이를 여러 매개 변수 목록으로 변환하고 싶습니다. 이를 설명하기 위해, 아래의 코드 :동적 변수 개수가있는 매개 변수 객체를 여러 매개 변수로 변환

var args = {one: 'apple', two: 'banana', three: 'kiwifruit'}; 
function(args) { 
} 

그리고 나는 그래서이처럼 사용할 수있는 몇 가지 방법으로 변환 인수를보고 싶다 :

그래서 나는이있어

function(one, two, three) { 
} 

args의 변수 수가 정적 인 경우 문제가되지 않습니다. 그러나, 제 경우에는 변수의 수가 동적입니다.

나는 .join() 메서드를 사용하여 쉼표로 구분 된 목록을 얻을 수 있음을 알고 있습니다. 그러나 이것은 문자열이므로 사용할 수 없습니다. 심지어 문자열에 Number()을 사용해 보았습니다. 누구든지 올바른 방향으로 나를 밀어 붙일 수 있었습니까? 당신이 싶게 Array.apply (와 기능)

var params = []; 

for (key in args) 
{ 
    params.push(args[key]); 
} 

foobar.apply(this,params); 

모두를 호출 배열에 반대

function foobar(one, two, three) { 
    ... 
} 

var args = {one: 'apple', two: 'banana', three: 'kiwifruit'}; 

// call foobar() and pass arguments one by one 
foobar(args.one, args.two, args.three); 

또한 변환 할 수 있습니다

+0

왜 당신은 그냥 그렇게 해달라고? – nils

답변

1

(예 : 디자인 타임에 모르는 사람)이 당신이 같은 값의 배열을 전달할 수 있습니다 function.apply

를 사용 a list of multiple parameters으로 직접 설명하십시오. 그래서

: 값

  • 패스 배열 함수에 값의 배열

    1. 변환 개체.

    을 감안할 때 :

    var args = {one: 'apple', two: 'banana', three: 'kiwifruit'}; 
    var f = function(one, two, three) { 
    } 
    

    그런 다음 1 :

    var values = []; 
    for (key in args) { 
        values.push(args[key]); 
    } 
    //or use underscore/lodash and do values = _.values(args); 
    

    그리고 2

    f.apply(this,values) 
    
  • +0

    정확하게 이전에 시도했기 때문에 분명히 제 코드에서 너무 오랫동안 쳐다 보았습니다. 이제 작동합니다. 정말 고마워요! – AKG

    +0

    환영합니다. 일반적인 에러는 대신'f.apply (values)'를하는 것이다. –

    1

    내가 바로 당신을 이해한다면, 이것은 귀하의 질문에 대답해야한다 방법은 완전히 좋다. 동적 인 인수를 전달할 필요가 없다면 다른 개발자가 함수에 전달되는 매개 변수를 훨씬 쉽게 이해할 수 있으므로 각 매개 변수를 개별적으로 전달하는 것이 좋습니다.

    +0

    내 역할에 대한 어리석은 감시. 재충전하려면 빨리 낮잠을 자야 겠네요. – AKG

    +0

    'args'에있는 매개 변수의 개수가 동적이라면 어떻게 될까요? – AKG

    +0

    D :이 대답을 당신의 필요에 맞으면 받아 들일 수 있습니다 : – nils

    1

    세 개의 인수로 함수 f를 호출합니다. 여기서 문제는 Object.keys가 키 순서를 보장하지 않는다는 것입니다. 따라서 인수 2에서 args.one으로 끝날 수 있습니다.

    function f(one, two, three) { 
        console.log(one, two, three); 
    } 
    
    var args = {one: 'apple', two: 'banana', three: 'kiwifruit'}; 
    var newArgs = Object.keys(args).map(function(el) { 
        return args[el]; 
    }); 
    
    // call f sending the list of values, show apple, banana, kiwifruit in the console 
    f.apply(null, newArgs); 
    

    Jsfiddle : 매개 변수의 동적 목록에 대한 http://jsfiddle.net/3N8tC/