2016-07-25 12 views
0

Eine Möglichkeit ist die Verwendung von Argumenten. Ich kann das Argumentarray durchlaufen und die Summe aller übergebenen Argumente zurückgeben.Summe aller an die Funktion übergebenen Argumente

function sum(){ 
    var sum =0; 
    for(var i=0;i<arguments.length;i++){ 
    sum += arguments[i]; 
    } 
    return sum; 
} 
sum(1,2); // returns 3 
sum(1,2,3); // returns 6 

Gibt es einen anderen Weg, es ohne Schleife zu tun?

+3

'const sum = (... args) => [... args] .reduce ((a, b) => a + b, 0); ' – zerkms

Antwort

5

Andere Leute gab Antworten mit redundanten Kopieren von arguments zu einem Array, das sich in einem Moment geworfen werden soll.

Stattdessen können Sie alles in einem Schritt tun:

function sum() { 
    return Array.prototype.reduce.call(arguments, function(a, b) { 
     return a + b; 
    }, 0); 
} 

Wenn ES2015 mit einer Option ist, können Sie etwas schöner (subjektiven) Umsetzung haben:

const sum = (...args) => [...args].reduce((a, b) => a + b, 0); 
1

zerkms Wie gesagt, können Sie reduce Funktion wie diese

alert([1, 2].reduce((a, b) => a + b, 0)); 
 
alert([1, 2, 3].reduce((a, b) => a + b, 0));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

Arguments ist ein Array ähnliches Objekt in JavaScript. Sie können die Eigenschaft reduce verwenden, um die Summe der Elemente zu konvertieren.

function sum() { 
    var args = Array.prototype.slice.call(arguments); 
    var sum = args.reduce(function(a, b) { 
    return a + b; 
    }) 
    return sum; 
} 


console.log(sum(1, 2)); // returns 3 
console.log(sum(1, 2, 3)); // returns 6 

können Sie auch forEach Methode

JSFIDDLE

1

Verwenden verwenden Array.prototype.slice.callarguments in ein Array zu konvertieren, und verwenden zu reduzieren Zahlen zusammenzufassen.

function sum(){ 
    var total = Array.prototype.slice.call(arguments).reduce(function(a, b) { 
    return a + b; 
    }, 0); 
    return total; 
} 
console.log(sum(1,2)); // returns 3 
console.log(sum(1,2,3)); // returns 6 

Demo: https://jsfiddle.net/wru8mvxt/10/

+0

Warum extra slice verwenden, wenn Sie' reduce' direkt auf die 'Argumente' anwenden können . – zerkms

+0

Nein, Sie können nicht, Argumente ist eine Sammlung, nicht Array, müssen Sie es in Array konvertieren :) –

+1

Sie können :-) Sehen Sie meine Antwort. – zerkms

0
In simple way you you can achieve it by using following 

function sum(){ 
     var total = 0; 
     for(var i=0; i<arguments.length; i++){ 
     total += arguments[i]; 
     } 
     return total; 
    } 
    console.log(sum(1, 2)); // returns 3 
    console.log(sum(1, 2, 3)); // returns 6 
Or 
    Also by using Array.prototype.reduce.call() method. 

    function sum(){ 
     var total = Array.prototype.reduce.call(arguments, function(a, b) { 
     return a + b; 
     }); 
     return total; 
    }  
    console.log(sum(1, 2)); // returns 3 
    console.log(sum(1, 2, 3)); // returns 6 
Verwandte Themen