Hier ein kleines Beispiel eines rekursiven Prozess mit einer Einheit Karte ist, die von 1000 teilt, bis er Optim
function toBest(num, unit) {
const map = {
"mm" : "m",
"m" : "km",
"km" : "km"
};
let recurse = false;
let nextUnit = unit;
if ((num/1000) >= 1) {
num = (num/1000);
nextUnit = map[unit];
recurse = true;
}
if (recurse) {
return toBest(num, nextUnit)
} else {
return num+" "+unit;
}
}
console.log(toBest(1000, "mm"));
console.log(toBest(10000000, "mm"));
console.log(toBest(47243278423, "m"));
console.log(toBest(1000000, "mm"));
console.log(toBest(999999, "mm"));
console.log(toBest(2, "mm"));
Jetzt erreicht hat, auf diese zu erweitern, Sie sagen, Sie können wollen cm bis m oder vielleicht sogar km bis dm. Hier wird die Objektkarte knifflig. Sie müssen den Divisor für jede mögliche gewünschte Konvertierung explizit definieren.
const map = {
"mm" : {
"to" : "cm",
"divisor" : 10
},
"km" : {
"to" : "dm",
"divisor" : .0001
},
}
Jetzt ist Ihre Schleife bekommt mehr if/else checky, aber die rekursive Logik halten sollte.
„Best“ ist subjektiv natürlich, aber man konnte von 1000 metrischen Präfixen, Dividieren jedes Mal, Schritt für Schritt durch, bis Sie ein Format haben du gemocht. – Pickle
Höchstwahrscheinlich ein rekursiver Aufruf bis "quantity/1000" <1 würde Ihnen passen, aber Sie müssten eine Objektkarte erstellen, um die Einheit zu halten –
Aber wie kann ich die Liste der möglichen Präfixe für jede Einheit erhalten. Wie Meter sollte auch cm unterstützen, was manchmal am besten sein kann, Der beste ist ein kleiner Wert> 1. – Alinex