2017-12-22 7 views
2

Ich habe eine Funktion, die ein Array als Eingabe nimmt. Wie kann ich es ändern, um mit variablen Argumenten sowie Arrays zu arbeiten. Zum Beispiel möchte ich arrSum(1,2,3) === arrSum([1,2,3]) beide true heißt zurückzukehren 6 Javascript Funktion mit mehreren Erweiterungen

const arrSum = arr => arr.reduce((a,b) => a+b,0) 
 
console.log(arrSum([1,2,3]))

+0

Verwenden der 'arguments' Variable. –

+3

FWIW, ich rate davon ab, die API so * flexibel * zu gestalten. Akzeptieren einer variablen Anzahl von Argumenten, in Ordnung. Akzeptieren eines Arrays, gut. Akzeptieren * entweder *? Nein. Ich würde mit der Variadic-Funktion gehen, und wenn Sie jemals ein Array von Werten haben, ist es einfach genug, das mit dem Spread-Operator oder 'arrSum.apply (null, arr)' 'anzuwenden. – deceze

Antwort

10

Sie können spread syntax mit concat verwenden zurückgeben sollte. Im ersten Fall erhalten Sie Array mit einem anderen Array innerhalb und im zweiten Fall nur ein Array von Argumenten, aber mit [].concat(...arr) werden Sie das in ein Array von Argumenten für beide Fälle transformieren.

const arrSum = (...arr) => [].concat(...arr).reduce((a, b) => a + b, 0) 
 
console.log(arrSum([1, 2, 3])) 
 
console.log(arrSum(1, 2, 3)) 
 
console.log(arrSum([1, 2, 3], [4], 5))

+0

Ja, gut zu denken. Vielen Dank –

1

Sie diese Probleme in vielen Art und Weise zu lösen, besteht eine Möglichkeit, wenn Sie Pfeil-Funktion verwenden wäre wie dieser mit Rest Operator

const arrSum = (...arr) => { 
 
    // if we have just on param which is array 
 
    if (arr.length === 1) { 
 
     return arr[0].reduce((a, b) => a + b, 0); 
 
    } 
 
    return arr.reduce((a, b) => a + b, 0); 
 
}; 
 
console.log(arrSum(1, 2, 3)); // 6 
 
console.log(arrSum([1, 2, 3])); // 6

im obigen Code verwenden wir Ruhe-Operator lernen mehr rest_parameters MDN

auch wir können normale Funktionen verwenden, um die Variable Argumente innerhalb von Funktionen wie diese

function arrSum(args) { 
 
    
 
    if (arguments.length === 1) { 
 
     return arguments[0].reduce((a, b) => a + b, 0); 
 
    } else { 
 
     return [].reduce.call(arguments, (a, b) => a + b, 0); 
 
    } 
 
} 
 
console.log(arrSum(1, 2, 3)); 
 
console.log(arrSum([1, 2, 3]));

mit erfahren Sie mehr über
arguments Object MDN

US/docs/Web/JavaScript/Referenz/Funktionen/Argumente

so kann das gleiche Problem gelöst werden viele Möglichkeiten wählen, was am besten für Sie funktioniert.

0

Eine Lösung Beispiel:

function arrSum(nums) { 
 
    var n = 0; 
 
    if (typeof(nums) != 'object') 
 
    return arrSum(arguments); 
 
    for (var i = 0; i < nums.length ; i++) 
 
    n += nums[ i ]; 
 
    return n; 
 
} 
 

 
arrSum(1, 2, 3); 
 
arrSum([ 1, 2, 3 ]);

Verwandte Themen