我想动态生成基于当前一天的文本字符串。所以,例如,如果它是第1天,那么我想我的代码生成=“它的<动态>1*<动态字符串>st</动态字符串>*</动态>”。

总共有12天,所以我做了以下事情:

我设置了一个for循环,循环12天。 在我的html中,我已经给了我的元素一个唯一的id来瞄准它,如下所示: <h1 id="dynamicTitle" class="CustomFont leftHeading shadow">On The <span></span> <em>of rest of generic text</em></h1> 然后,在我的for循环中,我有以下代码: $ (" # dynamicTitle跨度”). html(我); Var day = i; If (day == 1) { Day = I +“st”; } else if (day == 2) { 日= I + "nd" } else if (day == 3) { Day = I + "rd" }

更新

这是请求的整个for循环:

$(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) {
            }
        }
    }

当前回答

你只有12天?我想让它只是一个简单的查找数组:

var suffixes = ['','st','nd','rd','th','th','th','th','th','th','th','th','th'];

然后

var i = 2;
var day = i + suffixes[i]; // result: '2nd'

or

var i = 8;
var day = i + suffixes[i]; // result: '8th'

其他回答

const getOrdinalNum = (n) => n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : '');
function getSuffix(n) {return n < 11 || n > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((n - 1) % 10, 3)] : 'th'}

函数ordsfx(){返回(“th”、“圣”、“和”,“路”][(= ~ ~(一个< 0 ? a: a) % 100) > 10一个< 14 | | (% = 10)> 3 ?0:]}

参见https://gist.github.com/furf/986113#file-annotated-js的注释版本

就像效用函数应该做的那样,简短、可爱、高效。适用于任何有符号/无符号整数/浮点数。(尽管我无法想象有必要对浮点数进行ordinalize)

这里有一个稍微不同的方法(我不认为其他答案会这样做)。我不确定我是喜欢还是讨厌它,但它确实有效!

export function addDaySuffix(day: number) { 
  const suffixes =
      '  stndrdthththththththththththththththththstndrdthththththththst';
    const startIndex = day * 2;

    return `${day}${suffixes.substring(startIndex, startIndex + 2)}`;
  }

Intl。PluralRules,标准方法。

我只是想在这里放弃做这个的规范方法,因为似乎没有人知道它。不要白费力气。

如果你想让你的代码

自我记录 易于本地化 用现代标准

-这才是正确的方法。

const english_ordinal_rules = new Intl。PluralRules("en", {type: "ordinal"}); Const后缀= { 一:“圣”, 二:“和”, 一些:“路”, 其他:“th” }; 函数序数(number/*: number */) { Const category = english_ordinal_rules.select(number); Const suffix =后缀[类别]; 返回(数字+后缀); } // ->字符串 const test =数组(201) .fill () .map((_, index) => index - 100) . map(顺序) . join (" "); console.log(测试);

Intl。PluralRules构造函数(ECMA-402草案) 统一码的六个多元类别


Code-golf

虽然我不建议用你的代码打高尔夫,杀死可读性,但我为那些高尔夫球手想出了一个(92字节):

n=>n+{e:"st",o:"nd",w:"rd",h:"th"}[new Intl.PluralRules("en",{type:"ordinal"}).select(n)[2]]