如何获取/获取函数的所有参数?

时间:2018-04-09 07:00:43

标签: javascript arrays arguments

使用JavaScript,我们有arguments属性,可以让我们获取函数的参数。我通常这样做

function sum(){
    var agumentCount = arguments.length;
    var count =0;
    var sumArguments = [];

    // Fetching the arguments
    while(count != agumentCount){
        sumArguments.push(arguments[count]);
        count++;
    }

    // function logic -- neglect this
    var data = 0;
    for(var i=0; i<sumArguments.length;i++){
        data+=sumArguments[i];
    }
    return data;
}

//调用函数

sum(2,3);
sum(9,15,65,458748);
sum();
sum(1);

是否有更好的获取参数的方法,因为这需要O(n),其中n是函数的参数个数。

4 个答案:

答案 0 :(得分:1)

您可以使用...,扩展运算符来处理可变数量的参数:

function sum(...nums){ //The arguments are stored in the nums array.
    var sum = 0;
    nums.forEach(function(num){
        sum+=num;
    });
    return sum;
}

sum(1,2,3,4,5,6); //21

请查看this以获取更多信息。

编辑:

使用reduce函数获得更简洁易读的代码:

function sum(...nums){
    return nums.reduce(function(add,num){
        return add+num;
    });
}
sum(1,2,3,4,5,6);  //21

答案 1 :(得分:0)

您可以使用此代码,但这不会降低复杂性,但它可以更好地实现此类操作 -

function sum() {
  var arr = Array.from(arguments);

  return arr.reduce(function(total, x) {
    return total + x;
  }, 0)
}

console.log(sum(1, 2, 3, 4, 5)); // 15

答案 2 :(得分:0)

您无需获取参数 您可以检查第一个参数是否是一个数组并循环遍历该数组。

&#13;
&#13;
<structure>
    <container>
        <name>Container A</name>
        <item>
            <name>Item A</name>
        </item>
        <container>
            <name>Container A A</name>
            <item>
                <name>Item B</name>
            </item>
            <item>
                <name>Item A B</name>
            </item>
        </container>
    </container>
    <container>
        <name>Container B</name>
        <item>
            <name>Item C</name>
        </item>
    </container>
    <item>
        <name>Item X</name>
    </item>
</structure>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

参数就像数组一样,因为

1.it按索引退货;

2.it有长度属性。

但实际上它不是数组,因为它不是由构造函数Array生成的,因此它不会继承Array的原型函数。

这是JavaScript设计的缺陷。

幸运的是,您仍然可以&#34;借用&#34; Array的原型函数生成一个实际的数组。

function a(){ 
 var arr=Array.prototype.concat.apply(arguments);
}