JavaScript中格式化字符串:排序,复数和列表

javascript中格式化字符串:排序,复数和列表

您是否曾尝试对不同语言的单词进行排序、处理复杂的复数规则或以自然的方式格式化列表?Intl API提供了一些强大的功能,尤其是在处理字符串和列表方面。

简述

我们将重点介绍三个强大且常被忽视的功能:

Intl.Collator:正确排序和比较字符串,支持多种语言。Intl.PluralRules:处理多种语言的复数形式。Intl.ListFormat:以自然的方式格式化列表,适应不同语言的习惯。

Intl.Collator

立即学习“Java免费学习笔记(深入)”;

字符串排序并非易事。不同的语言对字母顺序、大小写敏感性和变音符号有不同的规则。Intl.Collator应运而生!

基本排序

const collator = new Intl.Collator("en", { sensitivity: "base" });console.log(collator.compare("apple", "banana")); // -1 (apple 在 banana 之前)console.log(collator.compare("banana", "apple")); // 1 (banana 在 apple 之后)console.log(collator.compare("apple", "apple")); // 0 (两者相等)

{sensitivity: 'base'} 使比较不区分大小写,因此 “apple” 和 “Apple” 被视为相同。

使用 Intl.Collator 对数组排序

const fruits = ["grape", "banana", "apple", "mango"];fruits.sort(new Intl.Collator("en").compare);console.log(fruits); // ['apple', 'banana', 'grape', 'mango']

collator.compare 传递给 .sort() 确保基于语言环境的正确排序。

String.localeCompare vs Intl.Collator

两者都可以用于排序,但有一些关键区别

Intl.Collator 默认支持本地化,而 localeCompare 使用系统或默认的语言环境设置。localeCompare 使用起来可能更直接,例如:"apple".localeCompare('banana')Intl.Collator 通常更快。Intl.Collator 支持多种语言的排序。

选项

localeMatcher:比较字符串时使用的算法,”best fit”(默认)或 “lookup”,控制语言环境的选择。sensitivity:比较时考虑的因素,”base”、”accent”、”case”、”variant”(最严格)。ignorePunctuationtrue 时忽略标点符号。

Intl.PluralRules:智能复数化

正确处理复数比简单地添加 “s” 更复杂。不同的语言有复杂的单数、双数、少数和复数规则。Intl.PluralRules 帮助我们动态确定正确的复数形式。

基本用法

const pluralrules = new Intl.PluralRules("en");console.log(pluralrules.select(1)); // "one"console.log(pluralrules.select(2)); // "other"console.log(pluralrules.select(0)); // "other"

对于英语,”one” 用于 1,”other” 用于其他所有数字。

不同的语言,不同的规则

例如,法语将 0 视为单数,而英语将其视为复数。

const pluralrulesfr = new Intl.PluralRules("fr");console.log(pluralrulesfr.select(1)); // "one"console.log(pluralrulesfr.select(0)); // "one" (法语将 0 视为单数)console.log(pluralrulesfr.select(2)); // "other"

动态生成复数消息

function getItemMessage(count) {  const pluralrule = new Intl.PluralRules("en").select(count);  const messages = {    one: `您有 ${count} 条消息。`,    other: `您有 ${count} 条消息。`,  };  return messages[pluralrule];}console.log(getItemMessage(1)); // "您有 1 条消息。"console.log(getItemMessage(3)); // "您有 3 条消息。"

此技术允许您的应用程序自动使用正确的复数形式。

选项

type:’cardinal’(默认)用于计数对象,’ordinal’ 用于序数(第一、第二等)。localeMatcher:’best fit’ 或 ‘lookup’,控制语言环境的选择。

Intl.ListFormat:自然格式化列表

编写项目列表(例如,“苹果、香蕉和橙子”)在不同语言中有所不同。有些语言使用逗号,有些使用 “和” 或 “et”,有些根本不使用连词。Intl.ListFormat 使正确格式化列表变得容易!

基本用法

const listformatter = new Intl.ListFormat("en", {  style: "long",  type: "conjunction",});console.log(listformatter.format(["apple", "banana", "cherry"]));// "apple, banana, and cherry"

它会自动在正确的位置添加 “and”!

不同的语言环境和样式

const listFormatterFr = new Intl.ListFormat("fr", {  style: "long",  type: "conjunction",});console.log(listFormatterFr.format(["pomme", "banane", "cerise"]));// "pomme, banane et cerise" (法语使用 "et" 代替 "and")const shortFormatter = new Intl.ListFormat("en", {  style: "short",  type: "disjunction",});console.log(shortFormatter.format(["tea", "coffee", "milk"]));// "tea, coffee, or milk" (disjunction 使用 "or" 代替 "and")

选项

type:’conjunction’(”and”)、’disjunction’(”or”)或 ‘unit’(例如,“5 小时,30 分钟”)。style:’long’(默认,完整单词)、’short’(缩写)、’narrow’(最小格式)。

结论

Intl.CollatorIntl.PluralRulesIntl.ListFormat 可以帮助您的 JavaScript 应用程序更国际化、更友好!这些 API 可以为您节省大量工作,并帮助您的应用程序轻松支持多种语言。

您之前尝试过这些 Intl 功能吗?

以上就是JavaScript中格式化字符串:排序,复数和列表的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1501319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 23:27:53
下一篇 2025年12月9日 18:08:02

相关推荐

  • 如何将兰链用于AI工作流程自动化

    引言 在飞速发展的AI领域,自动化是提升效率和可扩展性的关键。LangChain是一个开源框架,它提供强大的工具,用于将大型语言模型(LLM)集成到应用程序中。无论您是构建聊天机器人、数据处理管道还是智能决策系统,LangChain都能通过无缝连接不同的组件,实现AI工作流的自动化。本文将探讨如何利…

    好文分享 2025年12月19日
    000
  • 提高刺激的一个简单技巧

    刺激框架兼容性及旧版safari浏览器问题解决 Stimulus 框架原生支持所有现代的、自动更新的桌面和移动浏览器。然而,Stimulus 3 不兼容 Internet Explorer 11。在最近的一个项目中,我发现旧版本的 iOS Safari 浏览器在处理特定代码部分时也存在问题。为了说明…

    2025年12月19日
    000
  • 最佳SEO和性能优化的最佳优质WordPress插件

    构建高性能、功能强大的wordpress网站,插件至关重要。无论您是运营教育网站、电商平台还是个人作品集,seo和性能优化都必不可少。优质wordpress插件能提升网站速度、功能和搜索引擎排名,确保用户获得流畅体验。本文将介绍一些专注于seo和性能优化的优秀wordpress插件,它们与高级wor…

    好文分享 2025年12月19日
    000
  • 如何为Windows添加“使用VSCODIUM打开”

    Windows系统下的VSCodium用户,常常需要快速便捷地从文件资源管理器中打开文件夹。本文将指导您修改Windows注册表,添加“使用VSCodium打开”选项,实现这一目标。我们将介绍两种方法: 方法一:右键单击文件夹名称打开 此方法允许您直接右键单击文件夹名称,即可在VSCodium中打开…

    2025年12月19日
    000
  • TIL:使用ModuleCreateRequire(节点)在ES模型中同步导入

    使用node:module的createrequire在es模块中同步导入配置 我一直在寻找一种方法,在Node.js包中同步导入配置文件,例如process.cwd() + “/my-config.js”中的配置文件。import() 的问题在于它是异步的,而我的基础工具需要同步的配置文件。 在搜…

    2025年12月19日
    000
  • 最高网络安全趋势和基本技巧,以确保纳吉·齐齐(Najib Ziazi)的见解

    网络安全正在迅速发展,随着技术的进步,新的威胁出现了。在2025年,组织和个人必须通过了解关键趋势并实施有效的安全措施来保持领先地位。这是一些关键的网络安全趋势和维护保护的技巧。2025年的关键网络安全趋势 > AI驱动的网络威胁 – 黑客正在利用人工智能(AI)发动复杂的攻击,使…

    好文分享 2025年12月19日
    000
  • 使用OpenAI API在JavaScript中创建文本到语音AI代理

    简介 想要用AI将文本转换成语音?OpenAI的文本转语音(TTS)API让开发者能够轻松生成高质量的语音。本文将指导您使用OpenAI API在JavaScript中创建一个简单的AI驱动TTS代理,最终实现文本到语音的播放功能。 前提条件 开始之前,请确保您已安装Node.js(下载地址:此处)…

    2025年12月19日
    000
  • NextJS重定向到另一页教程

    Next.js 提供多种方法实现页面重定向,无论您构建的是客户端还是服务器端应用,都能轻松实现页面间的无缝跳转。本指南将介绍几种基于最新文档的 Next.js 重定向方法。 使用 redirect() 函数(服务器组件和 API 路由) Next.js 内置的 redirect() 函数主要用于服务…

    2025年12月19日
    000
  • 与发bun活着重新加载html

    this article demonstrates how to create a simple live reload mechanism for html content using bun’s built-in http server and server-sent events …

    2025年12月19日
    000
  • 最后,我找到了最好的AI IDE! (这可能会让您感到惊讶)

    我苦苦追寻软件开发领域的突破性技术已数月之久。我尝试过ai代码补全工具,用过笨拙的插件,甚至想过卖肾来购买那些昂贵的“ai增强”ide。我一度认为,兼具强大功能、灵活性和(至关重要)经济实惠的完美组合只是一个神话。直到我发现了一款改变游戏规则的工具。这并非简单的改进,而是范式转变。让我们深入探讨ai…

    2025年12月19日
    000
  • 如何从JavaScript数组和字符串中删除重复值

    在JavaScript应用开发中,重复数据问题时常出现,例如用户列表中的重复名称或句子中的重复单词。 本文将介绍几种高效移除JavaScript数组和字符串中重复值的方法,并分析其优缺点及应用场景。 从数组中删除重复项 方法一:使用Set对象 Set对象是处理重复数据的利器,其特性是不允许重复值。 …

    2025年12月19日
    000
  • 柏树断言要使用什么:cyshod()或期望()?

    Cypress 断言的选择:cy.should() 与 expect() 在构建混合 Web 自动化框架时,选择合适的断言方法至关重要。Cypress 提供两种主要方式进行断言:Cypress 内置的 cy.should() 和 Chai 的 expect()。本文将分析两种方法的优缺点,并指导您选…

    2025年12月19日
    000
  • 与JS集的数学魔术:神秘化

    追求简洁高效的代码和数学之美?那么您来对地方了!本文将深入探讨JavaScript集合,它不仅能去除重复项,更能作为实现经典数学集合理论的强大工具。 为什么选择集合? 在数学中,集合是互异元素的组合。这个概念完美地映射到JavaScript的Set对象。Set天然具备唯一性,免去了处理数组和手动过滤…

    2025年12月19日
    000
  • 使用Angular和MVC项目的区域J误差

    在使用angular和mvc项目时解决区域错误 本文介绍了在将Angular项目从版本5升级到版本18后,如何在MVC .cshtml页面中成功加载Angular组件,并解决出现的Zone.js错误。 问题描述: 项目使用MVC的.cshtml页面,并通过脚本标签或iframe加载Angular组件…

    2025年12月19日
    000
  • 使用HTML CSS和JavaScript具有最新UI/UX效果的动画加载器

    这段代码创建了一个U型霓虹灯动画加载器。让我们逐段分析其功能和样式: HTML结构: 代码使用简单的HTML结构创建加载器。 是加载器的容器,包含U型形状的球体( )和加载文本( )。每个球体都是一个 元素。 CSS样式: 立即学习“Java免费学习笔记(深入)”; body样式: 设置页面背景为深…

    2025年12月19日
    000
  • 网络开发的学习路径

    开启您的网络开发之旅!这份指南涵盖了核心技术、常用框架以及学习资源,无论您是新手还是想提升技能的开发者,都能从中获益。 一、核心技能: HTMLCSSJavaScriptGit & GitHub 二、选择您的方向: 前端开发: 学习一个前端框架,例如:ReactVueAngular后端开发:…

    2025年12月19日
    000
  • 飞地游戏月度报告:1月5日

    一月gamedev.js回顾:调查结果、游戏果酱和更多! 一月通常是GameDev.js较为平静的一个月,因为大部分精力都放在处理非手机相关的项目上。年度GameDev.js调查报告也在一月发布(调查本身在十二月进行)。但即便如此,这个月依然有不少值得关注的动态: 游戏方面:本月没有发布新的游戏。 …

    2025年12月19日
    000
  • 构建更好的代码:优先级可重复性和可维护性

    构建动态结构时,避免过度设计至关重要。 可维护性和组件复用性是构建高质量代码的关键。让我们通过一个例子来说明: 假设您的代码中频繁用到表格。每个表格都包含表头和表格主体。与其在每个页面都复制粘贴相同的表格代码,不如创建独立的表头和表格主体组件,然后将它们组合成一个可复用的表格组件。 通过这种方式,只…

    2025年12月19日
    000
  • Netflix,但更好

    免责声明:本项目与Netflix无关,仅为技术实验。 超越Netflix:构建更智能的电影推荐系统 Netflix作为流媒体巨头,拥有超过2亿用户和17000多部电影及电视节目,其推荐系统功不可没。该系统基于用户观看历史、相似节目、用户趋势和热门剧集等数据进行推荐。但如果我们能以更简便的方式复制这一…

    2025年12月19日
    000
  • 软件开发的未来:观看的趋势5

    软件开发正以前所未有的速度演进,人工智能、云计算、网络安全和自动化技术的进步是其主要驱动力。企业和开发者必须紧跟时代步伐,才能保持竞争力。本文将探讨2025年及未来几年,将重塑软件开发格局的十大关键趋势。 人工智能与机器学习赋能开发: AI和机器学习(ML)正在彻底改变软件开发流程,从代码生成到预测…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信