1-31 değerini alması ve onu 1., 2., 3., vs.'ye dönüştürmesi için bir JavaScript kod parçacığı var mı?1-31 değerini al ve javascript tarihine dön
Teşekkürler!
1-31 değerini alması ve onu 1., 2., 3., vs.'ye dönüştürmesi için bir JavaScript kod parçacığı var mı?1-31 değerini al ve javascript tarihine dön
Teşekkürler!
function getOrdinal(n) {
var s=["th","st","nd","rd"],
v=n%100;
return n+(s[(v-20)%10]||s[v]||s[0]);
}
Thanks @RobG bit değiştirilmiş versiyonu
function getOrdinal(n) {
if((parseFloat(n) == parseInt(n)) && !isNaN(n)){
var s=["th","st","nd","rd"],
v=n%100;
return n+(s[(v-20)%10]||s[v]||s[0]);
}
return n;
}
Testler
getOrdinal("test"); // test
getOrdinal(1.5); // 1.5
getOrdinal(1); // 1st
getOrdinal(2); // 2nd
getOrdinal(3); // 3rd
getOrdinal(4); // 4th
getOrdinal(true); // true
getOrdinal(Infinity); // Infinity
getOrdinal(NaN); // NaN
getOrdinal(void 0); // undefined
arayabilirsin, böylece o rahat Numara prototip içine fonksiyonu maymun yama bulabilir sayı üzerinde bir yöntem olarak (Pradeep'in cevabından utanmadan çalınan uygulama):
Number.prototype.toOrdinal = function() {
var n = this.valueOf(),
s = [ 'th', 'st', 'nd', 'rd' ],
v = n % 100;
return n + (s[(v-20)%10] || s[v] || s[0])
}
Örnek kullanım:
var someDay = Math.floor(Math.random() * 31 + 1);
alert(someDay.toOrdinal())
Yoksa Maymun Yama Evil mı inanıyoruz olabilir; her zamanki gibi, YMMV.
(Bazen bu özel yöntemth
diyoruz, ama bu çağrı için parantez gerekmez dilde biraz daha iyi çalışır.)
mantık bir açıklama ekleme. JavaScript özgüdür önemli noktalar:
%
operatör olumsuz temettü için olumsuz sonuçlar verir (böylece -1 % 5
-1
olan pozitif böleni modulo; 0
ve n-1
arasındaki tek cevaplar modülü operatör getiri diğer birçok uygulamaları, bu yüzden -1 % 5
, 'dur).undefined
değeriyle sonuçlanır.Mantık bu gerçekleri, bu son bölümleri olan küçük bir ifadeden doğru soneki döndürmek için kullanır.
s[(v-20)%10]
. v
(verilen sayı modulo 100 olan) 20'den küçükse, dizin negatiftir ve dizi erişimi undefined
değerini döndürür. Aksi takdirde, dizi endeksi 0 ile 9 arasındadır. 0'dan 3'e kadar olan değerler, doğru ilişkili son eki ("th", "st", "nd" ve "rd") döndürürken, 3'ten büyük bir şey tekrar undefined
değerini döndürür.
1 sonucu belirli bir değer ise, döndürün; aksi halde s[v]
'a erişmeyi deneyin. v
'un kendisi 0, 1, 2 veya 3 ise, sırasıyla "th", "st", "nd" veya "rd" harflerini alırız. Aksi halde tanımsız bir değer alırız ve ifade bir sonraki alternatife geçer.
Yukarıdaki sonuçlardan hiçbiri tanımlanmadıysa, "th" olan s[0]
'u döndürürüz.11, 12 ve 13 olmak üzere - - girişi 1, 2 veya 3 biten bütün diğer sayılar "st" alırken ", nd bir "th" alır
sonuç 4'ten 20'ye aracılığıyla her şeyin olmasıdır sırasıyla "ve" rd ".
'Number.prototype' 'a eklenmesi, yalnızca gerçekten sayı olan değerlere çağrılmasının yararına sahiptir. Ancak, değerin bir tam sayı olduğunu test etmelidir, aksi halde sıralamayı eklemeyin (ve orijinal değeri geri döndürün?). – RobG
Sadece v değil, v-20'nin neden hızlı bir sorusu var? – Craicerjack
Bunu PradeepSanjaya'nın cevabından kopyaladım, fakat 1, 2 ve 3'te biten sayıların "st", "nd" ve "rd" yi alması gerçeğiyle başa çıkmak için var - 11, 12'de biten rakamlar hariç ve 13, hepsi "th" olsun. –
Pradeep'in cevabı havalıdır, ancak biraz daha sağlam olan bir şey değeri test etmeli ve eğer bir değer (örneğin değeri döndürmek gibi) eklemek için uygun bir değer değilse, mantıklı bir şey yapmalıdır. tarayıcı ve düğüm hem de
var getOrdinal = (function() {
var re = /^\d+$/;
var ordinal = ["th","st","nd","rd"];
return function (value) {
var t;
if (re.test(String(value))) {
t = value % 100;
return t + (ordinal[(t - 20 % 10)] || ordinal[t] || 'th');
}
return value;
}
}());
getOrdinal(void 0); // undefined
getOrdinal( ); // undefined
getOrdinal(NaN ); // NaN
getOrdinal(true ); // true
getOrdinal(1.0 ); // 1st
getOrdinal('' ); // '' (empty string)
getOrdinal(Infinity); // Infinity
npm install ordinal
eserler. Sonra sadece:
var ordinal = require('ordinal')
ordinal(1); //=> '1st'
ordinal(2); //=> '2nd'
ordinal(3); //=> '3rd'
ordinal(4); //=> '4th'
ordinal(11); //=> '11th'
ordinal(12); //=> '12th'
ordinal(13); //=> '13th'
ordinal(21); //=> '21st'
ordinal(22); //=> '22nd'
ordinal(23); //=> '23rd'
ordinal(24); //=> '24th'
Vay be, ben yanlışlıkla Kod Golf yanılmak mı? :) –
Ayrıca, "1.5", "udnefinedth", "NaN", "trueth" ve "falseth" değerini döndürür. Fonksiyon muhtemelen girişin bir sayı veya uygun bir dizi olduğunu test etmelidir (bir tamsayı olabileceğinden emin olunması yeterlidir). Eğer öyleyse, sayıyı artı sırala. Aksi takdirde, orijinal değeri döndürün. – RobG
Güzel, kompakt bir çözüm :) – sameera207