如何将数组作为参数传递给javascript中的函数?

时间:2014-01-06 06:14:18

标签: javascript arrays function arguments

我正在尝试使用帮助功能来使用Google AnalyticsAPI,我在构建字符串时遇到了一个简单的问题。情况是,我必须应用过滤器,并且可能有n个过滤器(标称数量,无论如何不超过128)。我想编写一个函数,它可以接受n个字符串并将它们与逗号分隔结合起来。

我不知道参数的数量是否可以在javascript中变量,如果它可以将数组作为javascript中的参数(我是JS的新手),但我认为没有区别,因为变量只是{{1并且在JS中没有任何数据类型(我来自C ++ / Java背景并且发现它令人困惑)。所以我尝试将数组作为参数传递给函数,以便no。我可以使用的东西可以是动态的,由数组中的元素决定。

当我开始搜索解决方案时,我遇到了this page。在那之后,我最近遇到了this thread,它也引用了相同的链接,他们提供的格式对我没有好处。

为了清楚起见,让我提供我写过的函数定义。

var

这就是我所说的:

/**
 * Utility method to build a comma-ed string from an array of strings
 * for the multiple-condition requests to the GA API
 */
function buildString(strArray)
{
    var returnString='';
    for(var x in strArray)
        returnString+=x+',';
    return returnString = returnString.substring(0, returnString.length - 1);
}

其中buildString.apply(this,[desc(visits),source]) desc(visits)都是字符串,所以我假设我正在发送一个字符串数组。奇怪的是,source调用buildString函数中的thisnull都会给我“0,1”作为返回值。

请告诉我哪里出错了。我以错误的方式传递阵列吗?或者我的功能定义错了?或者是否有其他更简单的方法来实现我正在尝试的目标?

4 个答案:

答案 0 :(得分:4)

将数组传递给函数与传递任何其他类型没有区别:

var string = buildString([desc(visits), source]);

但是,您的函数不是必需的,因为Javascript具有内置函数,用于使用分隔符连接数组元素:

var string = someArray.join(',');

答案 1 :(得分:2)

你过度复杂 - JavaScript数组有一个内置的join方法:

[ desc( visits ), source ].join( ',' );

编辑:更简单:toString方法:

[ desc( visits ), source ].toString();

答案 2 :(得分:0)

Js参数可以是任何类型,对参数的数量没有限制,

但建议最多使用3-4个参数,如果有更多args,则可以将其作为对象或数组传递。

你不需要担心args的类型,js会完成这项任务。

例如:

var func1 = function(a) {
    console.log(a);
}

func1('good');
func1(1);
func1(['good', 'a', 1]);
func1({name: 'fn1', age: 12});

你喜欢什么!,

你甚至可以定义一个带有三个参数的函数,但只传递一个是好的!

var func2 = function(a, b, c) {
    console.log(a);
}

func2(1);
func2(1, 'good');
func2(1, 'good', 'night', 4);

默认数组obj有很多内置函数;例如:

var arr = ['good', 'night', 'foo', 'bar']; //define any thing in a array
str = arr.join(','); //you may get 'good,night,foo,bar'
var arr1 = str.split(','); // you may get ['good', 'night', 'foo', 'bar'];

答案 3 :(得分:0)

最简单的方法是使用内置的join方法:

[desc(visits), source].join(',');

无论如何,你的问题出现在for..in循环中

而不是:

for(var x in strArray){
    returnString+=x+',';
}

你应该:

for(var i in strArray){
    var x = strArray[i]; //Note this
    returnString+=x+',';
}

因为for ...返回索引/键,而不是foreach在其他语言中的实际元素

您的电话也应该是:

buildString.call(this,[desc(visits),source])buildString([desc(visits),source])

干杯