[英]ES5/6/Next way of iterating in groups or chunks over an array in JavaScript
[英]Arguments Array in JavaScript (ES5)
也許那不是我晚上:/非常簡單的事情,我想將一個數組作為參數提供給作為參數數組的函數:
function add() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
以下作品:
console.log(add(1,2,3,4,5,6));
但是,如果我填充一個數組並將其作為參數,例如:
var myNumbers = [];
for (var i=0; i<100; i++){
myNumbers.push(i);
}
console.log(add(myNumbers));
麻煩了 我想,我錯過了有關arguments
數組的重要信息。
我應該如何更改添加功能,以便這兩種可能性都可以使用?
arguments
對象是類似數組的對象,但不是數組。 它用於表示傳遞給函數的所有參數。 您僅將一個值傳遞給該函數,因此您的數組實際上位於arguments
對象的索引0處。
但是,在這里使用arguments
確實沒有多大意義,除非您需要在不定義顯式API的情況下動態處理事物。 只需在add
函數中聲明您的參數即可。
function add(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
如果您想同時支持這兩種情況,請按照您的評論進行操作:
function add() {
var arr = [].concat.apply([], arguments);
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
的說明 [].concat.apply([], arguments)
[].
是Array.prototype
簡寫,因為它是一個空數組。 concat
將兩個或多個數組合並在一起,或者將一個數組和值合並到該數組中。 arguments
不是數組,但是由於對象的某些類似於數組的特性-索引項和length
屬性,許多原型函數都可以在其上使用。 apply
調用具有給定上下文( this
綁定)和任意數量參數的函數。 在這種情況下,我們仍然希望使用數組作為this
值,以便能夠調用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;
}
sum的簡單解決方案:
function add() {
var arr= Array.prototype.slice.call(arguments);
arr = [].concat.apply([], arr);
return arr.reduce(function(f, s){return f + s;}, 0);
}
這里:
add(1,2,3,4,5,6);
......你調用add
與一系列的離散 (分離)的參數,並且在它們中的每顯示出來arguments
偽陣列,在1 arguments[0]
在2 arguments[1]
等等
但在這兒:
add(myNumbers);
...您正在用一個參數(數組)調用add
。 那是在arguments[0]
。
您將要編寫add
以適合您的調用方式。 如果要使用離散參數調用它,請按照自己的方式編寫。 如果要編寫它來接受數組,請讓它接受一個參數並遍歷該參數(將是數組):
function add(args) {
// ^------------- the one argument
var sum = 0;
for (var i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
如果要同時處理兩者 ,則可以使用Array.isArray
( Array.isArray
但可調整)來檢查第一個參數,以查看它是否為數組,如果是,則使用它;如果不是,則使用arguments
:
function add(args) {
if (!Array.isArray(args)) {
args = arguments;
}
var sum = 0;
for (var i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
旁注: arguments
不是數組,而是類似數組的 。
您可以使用申請
add.apply(null, [1,2,3])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.