我正在尝试使用帮助功能来使用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函数中的this
和null
都会给我“0,1”作为返回值。
请告诉我哪里出错了。我以错误的方式传递阵列吗?或者我的功能定义错了?或者是否有其他更简单的方法来实现我正在尝试的目标?
答案 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])
干杯