-1

我有一个可以接受多个参数的 API 方法,但这些参数必须是数组。我不想做的是为每个数组调用每个 api.someMethod() - 我试图将它们集中在一个调用中。

例如:

function getArrays() {
    var arr1 = ['1','2','3'];
    var arr2 = ['4','5','6'];
    var arr3 = ['7','8'];

    return [ arr1, arr2, arr3 ]
}

我为缺乏明确性表示歉意。我打电话给:

api.someMethod( getArrays() )

发生的情况是我的返回将我的数组包装在一个数组中,因为“someMethod”需要一个逗号分隔的数组列表,所以不会被接受。

api.someMethod( arr1, arr2, arr3 );
4

2 回答 2

1

使用apply而不是call. 然后,您可以传递一个参数数组,而不必将每个参数都设为单独的参数。

api.apply(context, [[arr1], [arr2], [arr3]]);

编辑以响应更新的问题。

这是采取的方法:

用作上下文(如果api您直接调用该方法,它将是)。

api.someMethod.apply( api, getArrays() );
于 2013-03-11T14:00:45.887 回答
0

我不想做的是为每个数组调用每个 api.call - 我试图将它们集中在一个调用中。

可以通过以下方式处理具有可变数量参数的函数:

function variableArgs(){
  console.log(arguments.length);
  for(var i =0;i<arguments.length;i++){
    console.log(arguments[i]);
  }
}
variableArgs("hello")
variableArgs("hello","there","how","are","you");

至于返回一个数组(如果这是你想要的),你可以:

function variableArgs(){
  var ret=[];
  for(var i =0;i<arguments.length;i++){
    console.log("ret is:",ret);
    //processing
    ret=ret.concat(arguments[i]);
  }
  return ret;
}
console.log("result of variableArgs is:",variableArgs([1,2],[3,4],[5,6]))
于 2013-03-11T14:03:42.133 回答