2017-05-29 6 views
0

Abhängig von der Eingabe sollte die Funktion ein Array von 'num' Elementen zurückgeben, die von 'Start' bis 'Ende' reichen. Das Argument 'type' legt fest, ob es sich um Ganzzahlen ('1') oder Fließkommazahlen ('0') handelt. Zuerst wird ein neues Array von 'num'-Länge erstellt und dann gibt es eine switch-Anweisung, um zu bestimmen, ob es Ganzzahlen oder Dezimalzahlen sein sollen. Ich habe Probleme mit der Rückgabe. Die Funktionen zur Erzeugung von Zufallszahlen habe ich von Mozillas Entwickler-Website übernommen. Das ganze Denken wird in React Natives Action Creator einfließen, aber ich denke nicht, dass das hier relevant ist.JavaScript - switch condition Rückgabe des Arrays

export const genNum = (start, end, num, type) => { 
    let numberArray = new Array(num); 

    switch (type) { 
    case 1: 
     return numberArray.map(function(num) { 
     let min = Math.ceil(start); 
     let max = Math.floor(end); 
     return Math.floor(Math.random() * (max - min)) + min; 
     }); 
    default: 
     return numberArray.map(function(num) { 
     return Math.floor(Math.random() * (max - min)) + min; 
    }); 
    } 
}; 

EDIT: Ich glaube nicht, es ist ein Duplikat, wie es beiden Fälle zu kombinieren versucht. Ich lese immer noch auf reduce() um unnötige switch statement loszuwerden. Ich habe Ihre Korrekturen übernommen. Im Moment sieht es so aus (ich muss die Gleitkommazahlen noch auf 2dp runden).

+2

Was meinen Sie mit Problemen, wenn Sie sie zurückgeben? Wenn ich Ihren Code lese, scheint es, als ob er das Array zurückgibt, aber es ist ein Array ohne Einträge, so dass 'map' nichts dagegen tut (map führt den Callback für jeden Eintrag einmal aus, aber wenn Ihr Array keine hat Einträge, dh der Callback läuft nie). Das Endergebnis ist ein Array mit der Länge 'num' und ohne Einträge. – Paulpro

+0

Dies sieht wie ein grob über komplizierter 'reduce()' aus. Warum brauchen Sie einen 'switch' und eine Duplizierung von' map() '? – charlietfl

+0

Mögliches Duplikat von [Erzeugen von zufälligen ganzen Zahlen in JavaScript in einem bestimmten Bereich?] (Https://stackoverflow.com/questions/1527803/generating-random-whole-numbers-in-javascript-in-a-specific-range) – num8er

Antwort

-1

Die 0 (Standard) -Fall hat nicht min und max definiert, liefert vermutlich alle Nullen. Außerdem benötigen Sie Math.floor nicht, wenn Sie Fließkommazahlen benötigen.

EDIT: wie Sie wahrscheinlich nicht ohne die Initialisierung der Array, anstatt der Magie, erhalten Sie vielleicht eine altmodische for-Schleife, tatsächlich von 0 bis num-1 zählen wollen.

+0

tut nichts gut, wenn map() nie über Array von leeren Steckplätzen iteriert ... nicht zu erwähnen, der Schalter ist redundant – charlietfl

+0

Danke für die downvotes, ich adressierte die Tatsache, dass es die Zahlen sowieso nicht generieren konnte. – tevemadar

+0

@charlietfl yep, ich bearbeitet. Der Switch ist jedoch nicht redundant, da der zweite Fall keinen Floor verwenden sollte. – tevemadar

2

Einige Ihrer Probleme werden gelöst, wenn Sie das Array ordnungsgemäß initialisieren. Sie können ein erstelltes Array nicht so abbilden, wie Sie es tun, da es keine Werte enthält. Ich schlage vor, Sie die Zeile, die das Array definiert zu:

let numberArray = Array(num).fill(-1); 

Dann können Sie einige der anderen Probleme in Ihrem Code-Adresse (wie, min und max nicht im zweiten Fall Block definiert sind, und die Gleitkomma Teil funktioniert nicht, weil Sie sie auf ganze Zahlen abrunden)

Verwandte Themen