【问题标题】:How to sort user names that are in multiple languages by specific languages order in javascript?如何按javascript中的特定语言顺序对多种语言的用户名进行排序?
【发布时间】:2021-04-29 02:20:41
【问题描述】:

我有多种语言的用户名,我必须按 '韩语 → 英语 → 和 unicode 中的其他语言' 顺序对名称进行排序。此外,当它们使用相同的语言时,我还必须根据它们在 unicode 中指定的顺序进行排序。

例如,如果第一个用户名是韩语,第二个用户名是英文,那么第一个用户在第二个用户之前。另一个例子,如果第一个用户名是英文,第二个用户名也是英文,我也必须排序。

我制作了检查它们是否使用特定语言的函数。

isKorean 检查是否为韩语,isEnglish 检查是否为英文,如果两者都不是,则为其他语言。

const isKorean = (str) => {
  const regExp = /^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$/;
  if (regExp.test(str)) {
    return true;
  }
  return false;
};

const isEnglish = (str) => {
  const regExp = /^[a-zA-Z]*$/;
  if (regExp.test(str)) {
    return true;
  }
  return false;
};

但是这些都是我的问题。

  1. 即使我知道用户名使用什么语言,我也不知道如何对用户名进行排序
  2. 即使用户名使用相同的语言,我也不知道如何对它们进行排序。

所以我的问题是......

  1. 韩语 → 英语 → 其他语言中的用户名在检查用户使用的语言后如何排序?
  2. 一旦解决了第一个问题,如何对使用相同语言的用户名进行排序?
    1. 韩语用户名
    2. 英文用户名
    3. 其他语言的用户名

提前致谢。

【问题讨论】:

  • 为什么不通过 phoenetics 来做,制作将它们转化为 phoenetics 的函数。然后按声音排序
  • @StepPen-codes 因为这是要求
  • 什么意思?另外我认为你应该通过书写系统而不是语言对它们进行分类。我的意思是有很多语言使用字母表,而不仅仅是英语
  • 英文名,我认为 Array.sort() 可以处理

标签: javascript arrays sorting


【解决方案1】:

我首先将列表分成三个列表:韩语、英语、其他,然后对每个列表进行排序,然后将它们连接起来。 JS Array Sort 没有内置的方式来进行多面排序(也称为“group by”排序)

注意:我不处理名称匹配韩文和英文的这里

const isKorean = (str) => {
  const regExp = /^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$/;
  if (regExp.test(str)) {
    return true;
  }
  return false;
};

const isEnglish = (str) => {
  const regExp = /^[a-zA-Z]*$/;
  if (regExp.test(str)) {
    return true;
  }
  return false;
};

const names = ['무현', 'Mark', 'Шумело', 'Brad', '규영', 'Tom', 'Consuela', '차빈', '규영', '차빈', '시훈', 'Ярослав', ];

const korean = names.filter(isKorean).sort();
const english = names.filter(isEnglish).sort();
const other = names.filter((n) => !isKorean(n) && !isEnglish(n)).sort();

const sorted = [...korean, ...english, ...other];
console.log(sorted);
/*
[
  "규영",
  "규영",
  "무현",
  "시훈",
  "차빈",
  "차빈",
  "Brad",
  "Consuela",
  "Mark",
  "Tom",
  "Шумело",
  "Ярослав"
]*/

【讨论】:

  • 我无法想到将它们放入每个数组中并将它们连接起来。这太棒了。谢谢! :)
【解决方案2】:

回答第二个问题 名称如何排序?

我不太懂韩语,但我认为 Array.sort() 可以帮助你。

Array.sort()

这是一个很容易被数组使用的函数。它适用于字符串,而不仅仅是整数和数字。

const names = {
  hangul: ['무현', '규영', '차빈', '규영', '차빈', '시훈'],
  alphabet: ['James', 'Tanya', 'Borsilli', 'Kazhat', 'Lee']
}

for (let system in names) {
  let print = `${system} unsorted => `
  let printSorted = `sorted => `
  for (let name in names[system])
    print += `${names[system][name]}, `
  for (let name in names[system].sort())
    printSorted += `${names[system][name]}, `

  console.log(print, '\n', printSorted)
}
参考 https://www.w3schools.com/jsref/jsref_sort.asp https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

【讨论】:

  • 您在这里假设names 已经按语言分开提供,根据问题似乎并非如此。
  • 我刚刚提供了第二个问题的答案,对名字进行了排序,他也已经有了过滤器
【解决方案3】:

您可以使用它来匹配 a-z、A-Z 和空格的序列:

/[a-zA-Z ]+/
const isKorean = (str) => {
  const regExp = /^[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$/;
  if (regExp.test(str)) {
    return true;
  }
  return false;
};

const isEnglish = (str) => {
  const regExp = /[a-zA-Z ]+/;
  if (regExp.test(str)) {
    return true;
  }
  return false;
};

const names = ['김무현', 'Albert Mark','May Carrie', 'LUO LOGN'];

const korean = names.filter(isKorean).sort();
const english = names.filter(isEnglish).sort();
const other = names.filter((n) => !isKorean(n) && !isEnglish(n)).sort();

const sorted = [...korean, ...english, ...other];
console.log(sorted);

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2015-04-03
    • 2018-04-17
    • 2021-02-18
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多