翻译后如何对数组进行排序?

发布于 2025-01-16 06:06:02 字数 181 浏览 2 评论 0原文

我有一个下拉菜单,其中包含来自后端的国家/地区列表。我使用 i18n 本地化来翻译它们。它们按英文字母顺序排列,下拉列表正确显示英语国家/地区列表。

当我以其他语言运行该平台时,它们会被正确翻译,但问题是它们保持英文排序。

有没有办法在应用 i18n 翻译后按字母顺序对国家/地区列表进行排序?

谢谢 :)

I have a dropdown with a list of countries coming from the back-end. I translate them using i18n localisation. They arrive alphabetically ordered in English and the dropdown correctly shows the list of English countries.

When I run the platform in other languages, they are translated correctly, but the problem is that they keep the English sorting.

Is there a way to sort the list of countries alphabetically after the i18n translation is applied?

Thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

極樂鬼 2025-01-23 06:06:02

您可以使用排序管道:

export class SortPipe implements PipeTransform {

transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: string): any {
    sortOrder = sortOrder && (sortOrder.toLowerCase() as any);

    if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value;

    let numberArray = [];
    let stringArray = [];

    if (!sortKey) {
      numberArray = value.filter(item => typeof item === 'number').sort();
      stringArray = value.filter(item => typeof item === 'string').sort();
    } else {
      numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]);
      stringArray = value
        .filter(item => typeof item[sortKey] === 'string')
        .sort((a, b) => {
          if (a[sortKey] < b[sortKey]) return -1;
          else if (a[sortKey] > b[sortKey]) return 1;
          else return 0;
        });
    }
    const sorted = numberArray.concat(stringArray);
    return sortOrder === 'asc' ? sorted : sorted.reverse();
  }

}

有一个 Stackbliz 示例:
角度排序管道 Stackblits

You can use sort pipe :

export class SortPipe implements PipeTransform {

transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: string): any {
    sortOrder = sortOrder && (sortOrder.toLowerCase() as any);

    if (!value || (sortOrder !== 'asc' && sortOrder !== 'desc')) return value;

    let numberArray = [];
    let stringArray = [];

    if (!sortKey) {
      numberArray = value.filter(item => typeof item === 'number').sort();
      stringArray = value.filter(item => typeof item === 'string').sort();
    } else {
      numberArray = value.filter(item => typeof item[sortKey] === 'number').sort((a, b) => a[sortKey] - b[sortKey]);
      stringArray = value
        .filter(item => typeof item[sortKey] === 'string')
        .sort((a, b) => {
          if (a[sortKey] < b[sortKey]) return -1;
          else if (a[sortKey] > b[sortKey]) return 1;
          else return 0;
        });
    }
    const sorted = numberArray.concat(stringArray);
    return sortOrder === 'asc' ? sorted : sorted.reverse();
  }

}

There is a Stackbliz sample:
Angular sort pipe Stackblits

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文