2016-04-08 17 views
-1

Ich weiß nicht, warum diese Rückkehr undefined?Ganzzahl leer Variable Javascript

var array = [6, 4, 6, 9]; 
var min; 
var findminimum = function(){ 
     array.reduce(function(prev, cur, index, array) { 
        if (cur < min) { 
         min = cur; 
        } 
     }, 0); 
     return min; 
    }; 
console.log(findminimum()); 

aber wenn ich gesetzt:

var min = 20; 

es in Ordnung ausgeführt wird, so jemand kann erklären mir, wie man richtig num Variable definieren?

+3

Wenn 'cur

+1

Wenn' min' nicht gesetzt ist, wird 'cur

+0

Sie haben Recht, danke :) – meks

Antwort

0

Sie benötigen einen Wert zuweisen min sonst werden Sie nicht in der Lage sein, seinen Wert

if (typeof min == "undefined" || cur < min) { 
    min = cur; 
} 
0

Das Problem zu testen, ist, dass, weil min nicht auf einen Wert initialisiert wird es undefined ist. Daher ist Ihr Vergleich if (cur < min) nie wahr und min ist weiterhin undefiniert. Auch, wenn Sie geht reduce() für diesen anstelle einer einfachen Schleife verwenden, können Sie es anders zu nutzen, hier ist ein Codebeispiel, das funktioniert:

var array = [6, 4, 6, 9, 1, -99]; 
var min = 9999; 
var findminimum = function() { 
    // you could return the final output of reduce()... 
    return array.reduce(function (prev, cur, index, array) { 
     if (cur < min) { 
      min = cur; 
     } 

     return min; // ...then this return statement would be here inside the reduce callback 
    }, 0); 
}; 
console.log(findminimum()); 
1

In der Tat undefined in Javascript bedeutet, dass diese Variable ist noch nicht definiert, und das ist genau das, was in Ihrem Fall passiert:

Sie die Variable min vor einen Wert zu zuweisen, so:

if (cur < min) 

wird immer false zurückkehren, s o Es ist kein Wert zugewiesen min und min = cur; wird nie erreicht werden, und Ihre Funktion wird undefined zurückgeben.

EDIT:

Wenn Sie nur schreiben var min; erklären Sie nur die Variable min, um es zu benutzen, müssen Sie es initialisieren, indem Sie einen Wert zu, in Ihrem Fall die Zuordnung sollten Sie schreiben:

var min = 0; 

Jetzt min haben den Wert 0, können Sie vergleichen sie dann mit anderen Variablen.

+0

Das zugrunde liegende Problem ist, dass er freie Variablen innerhalb 'findminimum' verwendet – rand

+0

Ja Art von, und' min' Variable sollte innerhalb 'findminimum' Funktion erklärt werden. –

0

Ihr Hauptproblem ist, verwenden Sie eine Variable von ouside reduzieren min, um das Minimum des Arrays zu speichern. Array#reduce() ist eine Methode, um ein einzelnes Ergebnis mit einem möglichen Startwert aus der Iteration zu erhalten.

Probleme (Reihenfolge umgekehrt):

  • reduce(..., 0) Start mit 0 macht keinen Sinn, weil es ein Minimum oder ein Wert sein könnte, die zu klein ist, wie in Ihrem Array [6, 4, 6, 9].

  • besser keine initialValue nehmen, denn wenn kein initialValue gegeben als verringern die ersten beiden Elemente für prev und cur nimmt. Wenn das Array nur ein Element enthält, wird dieses Element zurückgegeben.

  • Die Kurzform der erforderlichen reduzieren:

    min = array.reduce(function (prev, cur) { 
        return cur < prev ? cur : prev; 
    }); 
    

Jetzt haben Sie es in eine Funktion für das Minimum setzen und ein Array als Parameter übernehmen:

function getMinimum(array) { 
 
    return array.reduce(function (prev, cur) { 
 
     return cur < prev ? cur : prev; 
 
    }); 
 
} 
 

 
document.write(getMinimum([6, 4, 6, 9]) + '<br>'); 
 
document.write(getMinimum([6, 4]) + '<br>'); 
 
document.write(getMinimum([42]) + '<br>');

Verwandte Themen