使用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是函数的参数个数。
答案 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)
您无需获取参数 您可以检查第一个参数是否是一个数组并循环遍历该数组。
<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;
答案 3 :(得分:0)
参数就像数组一样,因为
1.it按索引退货;
2.it有长度属性。
但实际上它不是数组,因为它不是由构造函数Array生成的,因此它不会继承Array的原型函数。
这是JavaScript设计的缺陷。
幸运的是,您仍然可以&#34;借用&#34; Array的原型函数生成一个实际的数组。
function a(){
var arr=Array.prototype.concat.apply(arguments);
}