JavaScript中的参数数组(ES5)
也许这不是我的工作:/很简单,我想给一个数组作为参数,给一个函数作为参数数组:JavaScript中的参数数组(ES5),javascript,arrays,arguments,Javascript,Arrays,Arguments,也许这不是我的工作:/很简单,我想给一个数组作为参数,给一个函数作为参数数组: function add() { var sum = 0; for (var i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } 但如果我填充一个数组并将其作为参数,比如: var myNumbers = []; for (var i=0; i<100; i++)
function add() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
但如果我填充一个数组并将其作为参数,比如:
var myNumbers = [];
for (var i=0; i<100; i++){
myNumbers.push(i);
}
console.log(add(myNumbers));
var myNumbers=[];
对于(var i=0;i此处:
…您正在使用一系列离散(单独)参数调用add
,每个参数都显示在参数
伪数组中,1个在参数[0]
,2个在参数[1]
,等等
但在这里:
add(myNumbers);
…您正在使用一个参数调用add
,该参数是一个数组。位于参数[0]
您需要编写add
,以适应您想要调用它的方式。如果您想要使用离散参数调用它,请按照您已有的方式编写。如果您想要编写它以接受数组,请让它接受单个参数并循环该参数(即数组):
旁注:参数
不是数组,它只是数组。这里:
add(1,2,3,4,5,6);
…您正在使用一系列离散(单独)参数调用add
,每个参数都显示在参数
伪数组中,1个在参数[0]
,2个在参数[1]
,等等
但在这里:
add(myNumbers);
…您正在使用一个参数调用add
,该参数是一个数组。位于参数[0]
您需要编写add
,以适应您想要调用它的方式。如果您想要使用离散参数调用它,请按照您已有的方式编写。如果您想要编写它以接受数组,请让它接受单个参数并循环该参数(即数组):
旁注:arguments
不是数组,它只是一个类似数组的对象。arguments
对象是一个类似数组的对象,但它不是数组。它用于表示传递到函数中的所有参数。您只向函数传递了一个值,因此数组实际上位于arguments
o的索引0处对象
但是,在这里使用参数实际上没有多大意义,除非您需要在不定义显式API的情况下动态处理事情。只需在add
函数中声明您的参数即可
function add(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
功能添加(arr){
var总和=0;
对于(变量i=0;i
如果您想支持这两种情况,根据您的评论,您可以执行以下操作:
function add() {
var arr = [].concat.apply([], arguments);
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
函数添加(){
var arr=[].concat.apply([],参数);
var总和=0;
对于(变量i=0;i
解释
[].concat.apply([],参数)
[]。
是数组的简写。prototype
,因为它是一个空数组
concat
将两个或多个数组合并在一起,或将一个数组和值合并到数组中
arguments
不是数组,但由于对象索引项的某些类似数组的特性和length
属性,许多原型函数都将使用它
apply
调用具有给定上下文的函数(该绑定)和任意数量的参数。在这种情况下,我们仍然希望将数组用作此
值,以便能够调用concat
,然后是传递到add
中的所有参数。结果就是将所有参数作为适当的数组
参数对象是类似于数组的对象,但它不是数组。它用于表示传递给函数的所有参数。您只向函数传递了一个值,因此数组实际上位于参数对象的索引0处
但是,在这里使用参数实际上没有多大意义,除非您需要在不定义显式API的情况下动态处理事情。只需在add
函数中声明您的参数即可
function add(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
功能添加(arr){
var总和=0;
对于(变量i=0;i
如果您想支持这两种情况,根据您的评论,您可以执行以下操作:
function add() {
var arr = [].concat.apply([], arguments);
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
函数添加(){
var arr=[].concat.apply([],参数);
var总和=0;
对于(变量i=0;i
解释
[].concat.apply([],参数)
[]。
是数组的简写。prototype
,因为它是一个空数组
concat
将两个或多个数组合并在一起,或将一个数组和值合并到数组中
arguments
不是数组,但由于对象索引项的某些类似数组的特性和length
属性,许多原型函数都将使用它
apply
调用具有给定上下文的函数(该绑定)和任意数量的参数。在这种情况下,我们仍然希望将数组用作此
值,以便能够调用concat
,然后是传递到add
中的所有参数。结果就是将所有参数作为适当的数组
您可以使用
你可以用
此解决方案适用于以下两种情况:
function add() {
var arr= Array.prototype.slice.call(arguments);
arr = [].concat.apply([], arr);
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
此解决方案适用于以下两种情况:
function add() {
var arr= Array.prototype.slice.call(arguments);
arr = [].concat.apply([], arr);
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
在第二种情况下,myNumbers是一个数组(因此请尝试在add function中以参数[0]的形式访问)。在第二种情况下,myNumbers是一个数组(因此尝试在add function中以参数[0]的形式访问)。谢谢,我应该如何修改add函数,以便两者都能工作?@Lonely:您可以通过(这是新的,但对于较旧的浏览器很容易填充)。然后使用第一个参数或参数。我添加了一个示例。谢谢,我应该如何修改add函数,以便两个
function add() {
var arr= Array.prototype.slice.call(arguments);
arr = [].concat.apply([], arr);
return arr.reduce(function(f, s){return f + s;}, 0);
}