Kılavuzumda sütun başlıkları, bir excel e-tablosu gibi A,B,C...,AA,AB,AC,...
vb. Nasıl böyle dize numara dönüştürebilirsiniz: ben sadece @ # $ f önemsiz bahçesinde yazdı A => 1, B => 2, AA => 27
Mükemmel sütun sütun alfabesini (ör. AA) sayıya (ör., 25) dönüştürün (ör., 25)
cevap
Dene:
var foo = function(val) {
var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;
for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) {
result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1);
}
return result;
};
console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
Teşekkür ederim adam ... çok teşekkür ederim .. –
@JaisonJustus Hoş Geldiniz;) – Yoshi
pasaj ... ihtiyacını optimize edilecek .. :)
charToNum = function(alpha) {
var index = 0
for(var i = 0, j = 1; i < j; i++, j++) {
if(alpha == numToChar(i)) {
index = i;
j = i;
}
}
console.log(index);
}
numToChar = function(number) {
var numeric = (number - 1) % 26;
var letter = chr(65 + numeric);
var number2 = parseInt((number - 1)/26);
if (number2 > 0) {
return numToChar(number2) + letter;
} else {
return letter;
}
}
chr = function (codePt) {
if (codePt > 0xFFFF) {
codePt -= 0x10000;
return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
}
return String.fromCharCode(codePt);
}
charToNum ('A') => 1 değerini döndürür ve charToNum ('AA') => 27 değerini döndürür;
numToChar güzel çalışıyor, ama charToNum işlevinin eksik (ve verimsiz) gibi görünüyor. – mpen
@Mark evet sadece kısa bir çözümdür. Mümkünse kodu optimize edebilir ve daha iyi bir cevap gönderebilirsiniz. Teşekkürler –
Burada uygulamalıdır kod kısa bir örnek. Bu, belirli sayıda harfle çalışacaktır.
function letterToNumbers(string) {
string = string.toUpperCase();
var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', sum = 0, i;
for (i = 0; i < string.length; i++) {
sum += Math.pow(letters.length, i) * (letters.indexOf(string.substr(((i + 1) * -1), 1)) + 1);
}
return sum;
}
Public Function ColLet2Num(Letras As String)
'RALONSO MAYO 2017
'A-> 1
'OQ ->407
'XFD->16384
Dim UnChar As String
Dim NAsc As Long
Dim F As Long
Dim Acum As Long
Dim Indice As Long
Letras = UCase(Letras)
Acum = 0
Indice = 0
For F = Len(Letras) - 1 To 0 Step -1
UnChar = Mid(Letras, F + 1, 1)
NAsc = Asc(UnChar) - 64
Acum = Acum + (NAsc * (26^Indice))
Indice = Indice + 1
Next
If Acum > 16384 Then
MsgBox "La celda máxima es la XFD->16384", vbCritical
End If
ColLet2Num = Acum
End Function
çözelti 1: En iyi performans ve tarayıcı uyumluluğu
// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
var chrs = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ', mode = chrs.length - 1, number = 0;
for(var p = 0; p < letters.length; p++){
number = number * mode + chrs.indexOf(letters[p]);
}
return number;
}
çözeltisi 2: kısa kodu (ES6 ok fonksiyonu)
// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
return letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
}
testi:
['A', 'Z', 'AA', 'AB', 'ZZ','BKTXHSOGHKKE'].map(lettersToNumber);
// [1, 26, 27, 28, 702, 9007199254740991]
lettersToNumber('AAA'); //703
nasıl çalıştığını daha iyi açıklıyor ve diğer dillere limana daha kolay olan daha ayrıntılı biçimde Yoshi's answer yeniden yazdım:
var foo = function(val) {
var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var baseNumber = base.length;
var runningTotal = 0;
var characterIndex = 0;
var indexExponent = val.length - 1;
while(characterIndex < val.length){
var digit = val[characterIndex];
var digitValue = base.indexOf(digit) + 1;
runningTotal += Math.pow(baseNumber, indexExponent) * digitValue;
characterIndex += 1
indexExponent -= 1
}
return runningTotal;
};
console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
- 1. Bir javascript regex eşleşmesini ör.
- 2. Watir sınıfları nasıl uygulanır (ör. PageContainer)?
- 3. ComponentModel yansıması (ör. PropertyDescriptor) ve standart yansıma (ör. PropertyInfo) arasındaki fark nedir?
- 4. Web kullanıcısının dilini algıla, ör. JavaScript’te
- 5. Kakao: ham verilerden AVAsset (ör. NSData)
- 6. Görselleştirin ANCOVA dahil formüller (ör kütüphane HH)
- 7. javascript kitaplıklarını barındıran CDN'ler (ör. CodeMirror)
- 8. Kabuk stili joker karakterlerle eşleşen dize (ör. *)
- 9. Raylar - "nokta" ile params (ör. /google.com)
- 10. ScalaTest ile JUnit @Rule kullanma (ör. TemporaryFolder)
- 11. Windows yerel komutlarını (ör. VOL) Cygwin'den çalıştırma
- 12. DateTime 25 yıl geri bugün
- 13. SQL Server: İkili veri nasıl saklanır (ör. Word dosyası)?
- 14. Düğmelerin rengini UINavigationController görünümünde ve düğmelerinde (ör. Geri) değiştirin.
- 15. Modern GPU (ör. Fermi/Evergreen) sipariş yürütmeyi desteklemiyor mu?
- 16. Sunspot: Niteliğe göre faset sonuçlarını sırala/düzenle ör. durumun ardından
- 17. Sphinx'te bölme kaynak belgesi (ör. Dosya hiyerarşisini yönetme)
- 18. Seçenek türü kurucu için kodlayıcı nasıl oluşturulur, ör. Seçenek [Uluslararası]?
- 19. Standart boyutta bir WPF düğmesini (ör. Tamam) nasıl yaparım?
- 20. Android için zamanlanmış bildirim (ör. Olaylar için) oluşturma
- 21. cihaz görüntü ölçeğini alın (ör @ 1x, @ 2x ve 3x @)
- 22. Ondalık tarih biçimi (ör. 2011.580) normal tarih biçimine nasıl dönüştürülür?
- 23. Concrete5: set Küçük resmi oluştur resme (ör. PDF'ler için)
- 24. Uzak şube (ör. Github) komut satırından nasıl silinir?
- 25. Çıkarılabilir sürücüyü (ör. USB flash sürücü) algıla C/C++
- 26. Çapraz platform için statik kaydedici, ör. Java (Applet) ve Android
- 27. Kaynak nereye yerleştirilir, ör. görüntüleri, bu scaladoc kullanabilir?
- 28. Pandalar, yyyyQp (ör. 2013Q2) formunun üç aylık tarihlerini destekliyor mu?
- 29. Bir CakePHP görünümündeki bir dosyaya (ör. PDF) bağlantı oluşturma
- 30. pycharm, niyetleri nasıl özelleştireceğinizi (ör. "Sonra" kodunu değiştir)
Bir küçük düzeltme ... AA 27 –
sadece pozisyon kullanılamaz olmalıdır sayısal değeri olarak dönüştürmek istediğiniz sütunun Eğer AA 25. pozisyondaysa, cevabınız budur ... – Yaniro
Hayır, "bunun için kod snippet'i yok". Eğer birini yazdıysan, bize şu ana kadar ne yaptığını göster. Bu arada, neden "AA" 25 ve 27 değil? –