2016-04-19 9 views
1

Ich möchte ein Programm mit Ausgabe als auszuführen:Die Summe aus einem Bereich mit Javascript

console.log(range(1, 10)); 
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
console.log(range(5, 2, -1)); 
// → [5, 4, 3, 2] 
console.log(sum(range(1, 10))); 
// → 55 

Ich erhalte einen Fehler für array.length.Please unter den Code finden:

var array = []; 

function range (arr){ 
    var lower = Math.min(arr[0],arr[1]);  
    var upper = Math.max(arr[0],arr[1]); 

    for (var i=lower;i<=upper;i++){ 
     array.push(i); 
    } 
} 

function sum(array){ 
    for(var i=0;i < array.length;i++){ 
     var total = total+array[i]; 
    } 
} 

console.log(sum(range(1, 10))); 

Ich bin am Anfänger Niveau, bitte helfe. Danke.

+1

Geck, während der Range-Funktion, die Argumente als Bereich ([1,10]) – Manish

+0

Sollte den 'Bereich (5, 2, -1)' ==> '[-1, 0, 1 passiert Aufruf 2, 3, 4, 5] – JagsSparrow

Antwort

1

Sie ein paar haben Problem s hier:

1.) Sie geben in Ihrer range Funktion nichts zurück. Sie müssen das gefüllte Array zurückgeben.

2.) Sie übergeben das Array im Funktionsaufruf sum nicht korrekt.

3.) Sie geben in Ihrem Funktionsaufruf sum nichts zurück.

ohne Werte zurückkehrt, lässt du nicht deine Codeblöcke mit einander

var array = []; 

function range (arr){ 
    var lower = Math.min(arr[0],arr[1]);  
    var upper = Math.max(arr[0],arr[1]); 

    for (var i=lower;i<=upper;i++){ 
     array.push(i); 
    } 
    return array; // return the array to be used in the sum function 
} 

function sum(array){ 
    var total = 0; // need to create a variable outside the loop scope 
    for(var i in array){ 
     total = total+array[i]; 
    } 
    return total; 
} 

console.log(sum(range([1,10]))); // pass the array correctly 

Beachten Sie, dass die total Variable außerhalb des Bereichs des for-loop innerhalb der sum Funktion einstellen müssen arbeiten. Auf diese Weise können Sie den endgültigen Wert zurückgeben. Andernfalls würde undefined zurückgegeben werden.

Siehe Geige: https://jsfiddle.net/udyhb95a/

1
  1. Sie benötigen ein Array zu übergeben, wenn die Range-Funktion Sie range([1, 10])

    definiert Aufruf
  2. Sie benötigen eine Summenfunktion

Als Randnotiz neu zu schreiben, gibt es effizientere Wege um die Summe einer Reihe von Elementen zu berechnen, ohne sie zu durchlaufen.

function sum_of_range(start, end) { 
    return end * (end + 1)/2 - start * (start + 1)/2; 
} 

Edit:

Hier ist ein funktionierendes Summenfunktion

function sum(array) { 
    var accumulator = 0; 
    for (var i = 0; i < array.length; ++i) 
     accumulator += array[i]; 
    return accumulator; 
} 
+0

Wie kann ich ein zweites Beispiel ausführen, bitte erklären Sie ... console.log (range (5, 2, -1)); // → [5, 4, 3, 2] –

1

Sie benötigen sum & range zu modifizieren

function range(){ 
    var array = []; 
    var lower = Math.min.apply(null, arguments);  
    var upper = Math.max.apply(null, arguments);  

    for (var i=lower;i<=upper;i++){ 
     array.push(i); 
    } 
    return array; 
} 

function sum(array){ 
    return array.reduce((x,y)=>x+y,0); 
} 

console.log(range(1, 10)); 
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
console.log(range(5, 2, -1)); //if we are considering min & max from params 
// [-1, 0, 1, 2, 3, 4, 5] 
console.log(sum(range(1, 10))); 
// 55 
+0

Die Verwendung von 'reduce' ist elagant, ich würde es genauso machen. Aber für einen Neuling das ist vielleicht nicht die einfachste Funktion zu verstehen –

+0

Ja, aber sie werden Einblick in die Zukunft bekommen ..;) – JagsSparrow

+0

cool, das ist eine gute Antwort, zeigt es die Verwendung von Javascript-Arrays (Methode reduzieren) .Danke .. . :) –

1

Hier erklären Sie eine Funktion mit einem Parameter wie eine arr ay

function range (arr){ 
     ... 

Aber hier rufen Sie eine Funktion mit zwei Argumenten wie Zahlen

console.log(range(1, 10)); 

Mit diesem Aufruf Funktion

console.log(range([1, 10])); 

Und nicht Verwendung for..in für Arrays

for(var i in array){ it doesn't work as you expect 

Verwenden forEach Funktion oder Plan for Schleife

Auch Sie haben einige Fehler in sum Funktion

Siehe Arbeitsbeispiel unten:

function range(arr) { 
 
    var array = []; 
 
    var lower = Math.min(arr[0], arr[1]); 
 
    var upper = Math.max(arr[0], arr[1]); 
 

 
    for (var i = lower; i <= upper; i++) { 
 
     array.push(i); 
 
    } 
 
    return array; 
 
} 
 

 
function sum(array) { 
 
    var total = 0; 
 
    for (var i = 0; i < array.length; i++) { 
 
     total = total + array[i]; 
 
    } 
 
    return total; 
 
} 
 

 
document.write('range ' + range([1, 10]) + '<br>'); 
 
document.write('sum ' + sum(range([1, 10])));

+0

Es zeigte mir immer noch ein undefiniertes Ergebnis, während ich ein "Return-Array" am Ende der Bereichsfunktion hinzugefügt, es funktioniert jetzt gut. Danke –

+0

@gauravsharma ja, Sie verwenden 'Array' als globale Variable. Sie können diese Variable als lokal in der Funktion verwenden und sie zurückgeben. – isvforall

+0

Willst du sagen, wie global var nicht zurückkehren muss, obwohl ich es global halten konnte, konnte ich keine Antwort erhalten, ohne diesen Wert zurückzugeben. –

0

Hallo liebe es jetzt überprüfen.

   var array = []; 

       function range(arr, arr1) { 
        var lower = Math.min(arr); 
        var upper = Math.max(arr1); 
        for (var i = lower; i <= upper; i++) { 
         array.push(i); 
        } 
       } 

       function sum() { 
        var total = 0; 
        for (var i = 0; i < array.length; i++) { 
         total = total + array[i]; 
        } 
        return total; 
       } 
       console.log(sum(range(1, 10))); 
Verwandte Themen