只想通过我的参数设置一个数组。看看这个伪代码,看看我正在尝试做什么:
function someFunction(x = new Array()){
for (a in x){
some action with x[a];
}
}
someFunction([value a, value b, value c]);
所以我试图做一些可能与此类似的事情。先谢谢你们!
答案 0 :(得分:2)
如果我理解你正确,你想要使用空数组,以防没有参数传递给函数。您可以使用以下代码来实现此目的。
function someFunction(x){
x = x || [];
//...
}
someFunction([value a, value b, value c]);
答案 1 :(得分:0)
试试这个:
function someFunction() {
for(var i = 0; i < arguments.length; i+=1) {
// some action with arguments[i]
}
}
// usage
someFunction(a, b, c);
someFunction.apply(window, [a, b, c]);
arguments
属性在函数内自动定义,每个函数作用域都有一个新属性。它几乎一个数组,但并不完全。但是,在99%的情况下,你可以像使用数组一样使用它。
第二个用法示例是,如果您有一个要传入的数组,但它没有静态定义。函数对象上的apply方法将允许您传入上下文和参数数组。
答案 2 :(得分:0)
这基本上是each
的一个特例:
function each(a, f) {
a = a || [];
for (var i=0; i < a.length; ++i) {
f(a[i]);
}
}
虽然each
通常是作为数组的方法实现的,同时也是map
,filter
和reduce
/ fold
:
Array.prototype.each = function(f) {
for (var i=0; i < this.length; ++i) {
f(this[i], i);
}
};
Array.prototype.map = function(f) {
var result = [];
for (var i=0; i < this.length; ++i) {
result[i] = f(this[i], i);
}
return result;
};
Array.prototype.map = function(keep) {
var result = [];
for (var i=0; i < this.length; ++i) {
if (keep(this[i], i)) {
result.push(this[i]);
}
}
return result;
};
Array.prototype.foldl = function(f) {
var result = this[0];
for (var i=1; i < this.length; ++i) {
result = f(result, this[i]);
}
return result;
};
Array.prototype.foldr = function(f) {
var i=this.length-1
var result = this[i];
for (--i; i >= 0; --i) {
result = f(this[i], result);
}
return result;
};
Array.prototype.reduce = Array.prototype.foldl;
请注意,对数组使用for (... in ...)
会导致问题,因为除了整数索引外,它还会获取在数组上定义的属性。