Gerade oder ungerade Zahlen finden

Aug 21 2020

Ich suche nach Kritik, um zu sehen, was ich hätte besser machen können oder wie ich mich dem Schreiben eines Skripts zum Finden gerader oder ungerader Zahlen nähern könnte. Ich bin neu in der Programmierung mit JavaScript und im Programmieren im Allgemeinen. Dies ist eine der ersten Herausforderungen, die ich geschrieben habe, um gerade oder ungerade Zahlen zu finden.

    var numList = [];
    while(numList.length < 5){
    numList.push(window.prompt());
    }

    var evenNumbers = [];
    
    numList.forEach(function(element){
        if (element % 2 === 0){ 
            evenNumbers.push(element);
        }
    })
    document.write(evenNumbers);

Antworten

9 LucasWauke Aug 21 2020 at 07:55

Sie können Array.prototype.filter verwenden .

Sie können so lesen: Geben Sie ein Array zurück, das nur die Elemente enthält, die den Rückgabefunktionsausdruck erfüllen.

Auf diese Weise können Sie vermeiden, ein Array zu instanziieren und erst nach dieser Iteration die push.

var numList = [];
while(numList.length < 5){
  numList.push(window.prompt());
}

var evenNumbers = numList.filter(function (element) {
  return element % 2 === 0
});
// that's the same that 
// var evenNumbers = numList.filter(element => element % 2 === 0);

document.write(evenNumbers);

Sie können jedoch Pfeilfunktionen verwenden , die eine sauberere Syntax haben.

6 SᴀᴍOnᴇᴌᴀ Aug 21 2020 at 12:55

Verschiedene Möglichkeiten, um gerade oder ungerade Zahlen zu finden.

Während der Modulo-Operator zum Testen, ob eine Zahl gerade oder ungerade ist, gut funktioniert, ist eine schnellere Technik (von der ich nicht erwarten würde, dass ein Anfänger sie kennt) die Verwendung von bitweisem UND - dh& . In diesem Artikel finden Sie eine ausführliche Erklärung, wie es funktioniert .

function isEven(number) {
     return !(number & 1);
}
for (let x = 0; x < 6; x++) {
    console.log(x, ' is even: ', isEven(x));
}

Andere Bewertungsaspekte

Filtern des Arrays

Wie Lucas bereits erwähnt Array.prototype.filter()hat, kann es verwendet werden, um das Hinzufügen von Elementen in zu vereinfachen evenNumbers. Array.prototype.reduce()könnte verwendet werden, obwohl es nicht so präzise wäre, da jede Iteration das kumulative Array zurückgeben müsste, und der Anfangswert auf ein Array gesetzt werden müsste.

Sie haben zwar nicht speziell nach der Leistung gefragt, aber wenn Sie möchten, dass der Code so effizient wie möglich ist (z. B. wird er millionenfach (oder öfter) in kurzer Zeit ausgeführt, dann vermeiden Sie Iteratoren - z. B. funktionale Techniken mit array.filter(), array.map(), sowie for...ofSchleifen - verwenden Sie eine forSchleife.

Variablen deklarieren

constkönnte stattdessen verwendet werden var, um eine versehentliche Neuzuweisung für beide Arrays zu vermeiden, und wenn sich die Variablen innerhalb eines Blocks befänden, wäre der Gültigkeitsbereich auf den Block beschränkt. Beachten Sie, dass "es möglich ist, Elemente in das Array zu schieben" 1 , auch wenn es mit deklariert ist const.

Benutzer zur Eingabe auffordern

window.prompt()„zeigt einen Dialog mit einer optionalen Nachricht an, die den Benutzer auffordert, Text einzugeben.“ 2 . Als erstes Argument könnte eine freundliche Nachricht übergeben werden, um dem Benutzer Informationen über die erwartete Eingabe zu geben - z

window.prompt(“Please enter a number”);

Zusätzlich:

Bitte beachten Sie, dass das Ergebnis ein String ist. Das bedeutet, dass Sie manchmal den vom Benutzer angegebenen Wert umwandeln sollten. Wenn ihre Antwort beispielsweise eine Zahl sein soll, sollten Sie den Wert in Zahl umwandeln.

  const aNumber = Number(window.prompt("Type a number", ""));

3

Der NumberKonstruktor könnte also verwendet werden, um Zahlen im Array zu speichern.

numList.push(Number(window.prompt("Please enter a number")));

Ausgabe senden mitdocument.write()

Hinweis : Da document.write()in den Dokumentenstrom geschrieben wird, wird beim Aufrufen document.write()eines geschlossenen (geladenen) Dokuments automatisch document.open() aufgerufen, wodurch das Dokument gelöscht wird .

4

Planen Sie also nicht, diese Funktion für Skripte zu verwenden, die auf Webseiten mit auf der Seite vorhandenen DOM-Elementen ausgeführt werden, damit sie nicht entfernt werden.

5 RenéSchaar Aug 21 2020 at 14:03

Verwenden Sie let ES6 anstelle von var

var numList = [];
let numList = [];

etc.

Verwenden Sie die Filtermethode

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
}) 

Wie von Lucas Wauke vorgeschlagen

let evenNumbers = numList.filter(element => element % 2 === 0);

Teilen Sie dem Benutzer mit, was er in die Eingabeaufforderung eingeben soll

numList.push(window.prompt());
numList.push(window.prompt("Please enter a whole number"));

Sie sollten auf jeden Fall an Ihrem Codestil arbeiten, um ihn besser lesbar zu machen

Verwenden Sie Einzüge

while(numList.length < 5){
numList.push(window.prompt());
}
while(numList.length < 5){
    numList.push(window.prompt());
}

Lassen Sie Leerzeichen vor geschweiften Klammern

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
 numList.forEach(function(element) {
     if (element % 2 === 0) { 
         evenNumbers.push(element);
     }
 })

Meiner Meinung nach ist es besser lesbar, wenn Sie ein Leerzeichen in Klammern lassen.

Ich persönlich kenne nicht viele Leute, die das tun, aber probiere es aus, vielleicht funktioniert es für dich

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
 numList.forEach( function( element ) {
     if ( element % 2 === 0 ) { 
         evenNumbers.push( element );
     }
 } )

Dies ist besonders hilfreich, wenn mit vielen Klammern ( Pseudocode ) gearbeitet wird:

method(function(method(getter())).setSomething(getSomethingFromSomewhere(somewhere)))
method( function( method( getter() ) ).setSomething( getSomethingFromSomewhere( somewhere ) ) )

Wie Sie sehen können, ist es ziemlich einfach zu erkennen, welche Klammern zusammengehören

Fazit

Vor

var numList = [];
while(numList.length < 5){
numList.push(window.prompt());
}

var evenNumbers = [];

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
document.write(evenNumbers); 

Gemäß

let numList = [];

while ( numList.length < 5 ) {
    numList.push( window.prompt() );
}

let evenNumbers = numList.filter(element => element % 2 === 0);

document.write( evenNumbers );