function convertToRoman(num) {
//seperate the number in to singular digits which are strings and pass to array.
var array = ("" + num).split(""),
arrayLength = array.length,
romStr = "";
//Convert the strings in the array to numbers
array = array.map(Number);
//Itterate over every number in the array
for (var i = 0; i < array.length; i++) {
//Calculate what power of ten the digit is by minusing it's index from the array length and passing it to variable "tenToPowerOf"
var tenToPowerOf = arrayLength - array.indexOf(array[i]) - 1,
low = "",
mid = "",
upp = "";
//Set the low, mid and high variables based on their tenToPowerOf value
switch (tenToPowerOf) {
case 0:
low = "I";
mid = "V";
upp = "X";
break;
case 1:
low = "X";
mid = "L";
upp = "C";
break;
case 2:
low = "C";
mid = "D";
upp = "M";
break;
case 3:
low = "M";
mid = "¯V";
upp = "¯X";
break;
}
//Check for digit value and add it's Roman Numeral value (based on it's power from the above switch statement) to romStr
//The problem is, switch "remembers" the value of low, mid and high from the last time it itterated over the number. Thus 99 becomes "XCXC" and not "XCIX".
switch (array[i]) {
case 1:
romStr += low;
break;
case 2:
romStr += low.repeat(2);
break;
case 3:
romStr += low.repeat(3);
break;
case 4:
romStr += low + mid;
break;
case 5:
romStr += mid;
break;
case 6:
romStr += mid + low;
break;
case 7:
romStr += mid + low.repeat(2);
break;
case 8:
romStr += mid + low.repeat(3);
break;
case 9:
romStr += low + upp;
break;
case 10:
romStr += upp;
break;
default:
break;
}
}
//return array;
return romStr;
}
convertToRoman(99);
- Evet, payımı payımı sormadan önce ilgili bir yanıt aramak için harcadım (1.5+ saat).
İşlev, sayıları Romen Rakamlarına dönüştürür.Neden bu JavaScript anahtar ifadesi (for döngüsünün içinde), önceki bir iterasyondan gelen değerleri saklıyor?
- O on (veya uzunluğuna ilişkin pozisyonun Buradaki sayı gücüne dayalı bir dizi Sonra
- için daha sonra basamak
- dönüştürür için kendisine
- Splitleri sayısını geçti bir sayı argüman alır sayı) düşük orta ve yüksek değerleri
- olarak ayarlar. Bu değerler daha sonra Romen Rakamları tarafından dikte edilen sıraya uygulanır ve bir dizeye iletilir.
- Son olarak, dizge döndürülür.
Birden çok kez gerçekleşen rakamlara sahip sayılarla çalışır. Bunun nedeni, anahtar kutusunun for döngüsünde bir kereden fazla eşleştirildiğinde, önceki yinelemeden düşük, orta ve yüksek değerleri uygular.
- Buradaki soru başlığında ama ben de çözmeye çalıştığım soruna bir çözüm sormak istiyorum lütfen.
- memnuniyetle daha fazla bilgi sağlayacaktır ve JavaScript işlevi kapanışları kullanır ve döngü hala bunun dışında var içeride başka bir deyişle, varsayılan olarak değişkenleri değerlerini sıfırlamak olmadığından her soruyu
Sorunuzda asıl sorunuzla birlikte ilgili kodu koyabilir misiniz? (links die) – Neal