在函数的参数中设置数组

时间:2011-07-18 04:14:09

标签: javascript arrays parameters for-loop

只想通过我的参数设置一个数组。看看这个伪代码,看看我正在尝试做什么:

function someFunction(x = new Array()){
 for (a in x){
  some action with x[a];
 }
}

someFunction([value a, value b, value c]);

所以我试图做一些可能与此类似的事情。先谢谢你们!

3 个答案:

答案 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通常是作为数组的方法实现的,同时也是mapfilterreduce / 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 ...)会导致问题,因为除了整数索引外,它还会获取在数组上定义的属性。