Saya ingin menghasilkan string teks secara dinamis berdasarkan hari ini. Jadi, misalnya, jika ini adalah hari 1 maka saya ingin kode saya menghasilkan = "Ini adalah <dynamic> 1 * <string dinamis> st </ string dinamis> * </dynamic>".
Ada total 12 hari jadi saya telah melakukan yang berikut:
Saya telah membuat loop for yang loop selama 12 hari.
Di html saya, saya telah memberikan elemen saya id unik untuk menargetkannya, lihat di bawah:
<h1 id="dynamicTitle" class="CustomFont leftHeading shadow">On The <span></span> <em>of rest of generic text</em></h1>
Kemudian, di dalam for for loop saya memiliki kode berikut:
$("#dynamicTitle span").html(i); var day = i; if (day == 1) { day = i + "st"; } else if (day == 2) { day = i + "nd" } else if (day == 3) { day = i + "rd" }
MEMPERBARUI
Ini adalah keseluruhan untuk loop seperti yang diminta:
$(document).ready(function () {
for (i = 1; i <= 12; i++) {
var classy = "";
if (daysTilDate(i + 19) > 0) {
classy = "future";
$("#Day" + i).addClass(classy);
$("#mainHeading").html("");
$("#title").html("");
$("#description").html("");
} else if (daysTilDate(i + 19) < 0) {
classy = "past";
$("#Day" + i).addClass(classy);
$("#title").html("");
$("#description").html("");
$("#mainHeading").html("");
$(".cta").css('display', 'none');
$("#Day" + i + " .prizeLink").attr("href", "" + i + ".html");
} else {
classy = "current";
$("#Day" + i).addClass(classy);
$("#title").html(headings[i - 1]);
$("#description").html(descriptions[i - 1]);
$(".cta").css('display', 'block');
$("#dynamicImage").attr("src", ".." + i + ".jpg");
$("#mainHeading").html("");
$(".claimPrize").attr("href", "" + i + ".html");
$("#dynamicTitle span").html(i);
var day = i;
if (day == 1) {
day = i + "st";
} else if (day == 2) {
day = i + "nd"
} else if (day == 3) {
day = i + "rd"
} else if (day) {
}
}
}
javascript
jquery
numbers
Antonio Vasilev
sumber
sumber
if
blok yang selanjutnya dikandung oleh loop? Tampilkan lebih banyak kode ....Jawaban:
The Aturan adalah sebagai berikut:
Kode JavaScript berikut (ditulis ulang pada Juni '14) menyelesaikan ini:
Contoh output untuk angka antara 0-115:
sumber
111
,112
dan113
harus menghasilkan"111th"
,"112th"
dan"113th"
masing-masing, bukan dengan"111st"
,"112nd"
, dan"113rd"
diproduksi oleh fungsi sebagai saat kode.n=>n+(n%10==1&&n%100!=11?'st':n%10==2&&n%100!=12?'nd':n%10==3&&n%100!=13?'rd':'th')
Dari Shopify
sumber
Pendekatan minimal satu baris untuk sufiks ordinal
(ini untuk bilangan bulat positif, lihat di bawah untuk variasi lain)
Penjelasan
Mulailah dengan array dengan sufiks
["st", "nd", "rd"]
. Kami ingin memetakan bilangan bulat yang diakhiri dengan 1, 2, 3 (tetapi tidak berakhir pada 11, 12, 13) dengan indeks 0, 1, 2.Bilangan bulat lainnya (termasuk yang berakhir pada 11, 12, 13) dapat dipetakan ke hal lain — indeks yang tidak ditemukan dalam array akan dievaluasi
undefined
. Ini salah dalam javascript dan dengan penggunaan logis atau (|| "th"
) ekspresi akan kembali"th"
untuk bilangan bulat ini, yang persis seperti yang kita inginkan.Ekspresi
((n + 90) % 100 - 10) % 10 - 1
melakukan pemetaan. Hancurkan:(n + 90) % 100
: Ekspresi ini mengambil integer input - 10 mod 100, memetakan 10 hingga 0, ... 99 hingga 89, 0 hingga 90, ..., 9 hingga 99. Sekarang bilangan bulat yang diakhiri dengan 11, 12, 13 berada di bagian bawah akhir (dipetakan ke 1, 2, 3).- 10
: Sekarang 10 dipetakan ke −10, 19 hingga −1, 99 hingga 79, 0 hingga 80, ... 9 hingga 89. Bilangan bulat yang diakhiri dengan 11, 12, 13 dipetakan ke bilangan bulat negatif (−9, −8, −7).% 10
: Sekarang semua bilangan bulat yang diakhiri dengan 1, 2, atau 3 dipetakan ke 1, 2, 3. Semua bilangan bulat lainnya dipetakan ke sesuatu yang lain (11, 12, 13 masih dipetakan ke −9, −8, −7).- 1
: Mengurangi satu memberikan pemetaan akhir dari 1, 2, 3 ke 0, 1, 2Memverifikasi bahwa itu berfungsi
Variasi
Mengizinkan bilangan bulat negatif:
Dalam sintaks panah lemak ES6 (fungsi anonim):
Memperbarui
Alternatif yang lebih pendek untuk bilangan bulat positif adalah ekspresi
Lihat posting ini untuk penjelasan.
Perbarui 2
sumber
Anda dapat menggunakan perpustakaan saat fungsi data lokal .
Kode:
sumber
Intl.PluralRules
, metode standar .Saya hanya ingin menjatuhkan cara kanonik melakukan ini di sini, karena sepertinya tidak ada yang mengetahuinya.
Intl.PluralRules
konstruktor (Draft ECMA-402)sumber
Anda hanya punya 12 hari? Saya akan tergoda untuk membuatnya hanya array pencarian sederhana:
kemudian
atau
sumber
$("#dynamicTitle span").html(suffix[i-1]);
Dengan memisahkan angka menjadi array dan membalikkan, kita dapat dengan mudah memeriksa 2 digit terakhir dari angka menggunakan
array[0]
danarray[1]
.Jika angka di remaja
array[1] = 1
itu membutuhkan "th".sumber
sumber
n - 1
sebagian (pengembalian tidak ditentukan). Juga gagal untuk angka yang lebih besar dari 110, misalnyagetSuffix(111)
mengembalikan "st". Itu memecahkan masalah OP di mana angka 1 hingga 12, tetapi bukan solusi umum. :-(Saya menulis fungsi ini untuk menyelesaikan masalah ini:
Dengan ini, Anda bisa memasukkan
.addSuffix()
nomor apa saja dan itu akan menghasilkan apa yang Anda inginkan. Sebagai contoh:sumber
number
dalam string inivar lastDigits=n.substring(number.length-2);
harus diubah menjadithis
n
bukanthis
, tapi terima kasih telah menunjukkan bug itu! :)Versi alternatif dari fungsi ordinal dapat sebagai berikut:
Variabel diberi nama lebih eksplisit, menggunakan konvensi kasus unta, dan mungkin lebih cepat.
sumber
Saya menulis fungsi sederhana ini tempo hari. Meskipun untuk kencan Anda tidak perlu angka yang lebih besar, ini juga akan memenuhi nilai yang lebih tinggi (1013, 36021 dll ...)
sumber
function ordsfx(a){return["th","st","nd","rd"][(a=~~(a<0?-a:a)%100)>10&&a<14||(a%=10)>3?0:a]}
Lihat versi beranotasi di https://gist.github.com/furf/986113#file-annotated-js
Singkat, manis, dan efisien, sama seperti fungsi utilitas seharusnya. Bekerja dengan bilangan bulat / float yang ditandatangani / tidak ditandatangani. (Meskipun saya tidak bisa membayangkan kebutuhan untuk menahbiskan mengapung)
sumber
Ini pilihan lain.
Perhatikan pengecualian untuk remaja? Remaja sangat akward!
Sunting: Lupa tentang tanggal 11 dan 12
sumber
Saya ingin memberikan jawaban fungsional untuk pertanyaan ini untuk melengkapi jawaban yang ada:
kami telah membuat array nilai khusus, yang penting untuk diingat adalah array memiliki indeks berbasis nol sehingga ordinalSuffix [0] sama dengan 'st'.
Fungsi kami numberToOrdinal memeriksa apakah nomor tersebut diakhiri dengan nomor remaja di mana case menambahkan nomor dengan 'th' karena semua nomor maka ordinals adalah 'th'. Dalam hal nomor tersebut bukan remaja, kami meneruskan nomor tersebut ke addSuffix yang menambahkan nomor ke ordinal yang ditentukan oleh jika angka minus 1 (karena kami menggunakan indeks berbasis nol) mod 10 memiliki sisa 2 atau kurang itu diambil dari array, kalau tidak itu 'th'.
output sampel:
sumber
Yang lama saya buat untuk barang-barang saya ...
sumber
Sangat merekomendasikan perpustakaan tanggal-fns yang sangat baik . Cepat, modular, tidak berubah, bekerja dengan tanggal standar.
Lihat date-fns docs: https://date-fns.org/v2.0.0-alpha.9/docs/format
sumber
Saya menulis fungsi ini untuk angka yang lebih tinggi dan semua kasus uji
sumber
Ini pendekatan yang sedikit berbeda (saya kira jawaban lain tidak melakukan ini). Saya tidak yakin apakah saya menyukainya atau membencinya, tetapi itu berhasil!
sumber
Ini untuk satu liners dan pecinta es6
Pilihan lain untuk + menjadi nomor adalah:
Juga untuk menyingkirkan awalan ordinal cukup gunakan ini:
jangan ragu untuk memodifikasi sesuai dengan yang Anda butuhkan
sumber
Anda juga dapat menggunakan
scales::ordinal()
fungsi ini. Cepat dan mudah digunakan.sumber
Saya sangat merekomendasikan ini, sangat mudah dan mudah dibaca. Saya harap ini membantu?
KELUARAN
sumber
Kamu bisa memakai
1<sup>st</sup> 2<sup>nd</sup> 3<sup>rd</sup> 4<sup>th</sup>
untuk memposisikan akhiran
sumber