[JavaScript]像在 Windows 系统中一样对字符串(文件名)进行排序。

この記事は約2分で読めます。
スポンサーリンク

我想做的事情

这段代码以与 Windows 对文件名进行排序相同的方式对字符串数组(主要是文件名)进行排序。

背景

让我们看看按以下方式排序后的结果。

代码:

filenames.sort();

输入:

filenames = ["10","1","2","a","A","b","B","い","ア","あ"]

结果:

['1', '10', '2', 'A', 'B', 'a', 'b', 'あ', 'い', 'ア']

这种排序方法按字符编码(高或低)对字符进行排序。

因此,这些数字应该排列成1、2、10 ,但它们显示为1、10、2 。

此外,平假名、片假名和字母的排序结果可能与您预期的不同。

スポンサーリンク

执行

以下实现允许您以类似于 Windows 文件名的方式对文件进行排序(我没有验证它们是否完全相同,但我找不到任何差异,包括汉字的排列方式)。

代码:

const collator = new Intl.Collator('ja-JP', { numeric: true, sensitivity: 'base' });
filenames.sort(collator.compare);

输入:

filenames = ["10","1","2","a","A","b","B","い","ア","あ"]

结果:

['1', '2', '10', 'A', 'a', 'B', 'b', 'あ', 'ア', 'い']

这些数字将按照您希望它们在序列1、2、10中的顺序排列,因此它们将按序列1、10、2排列。

此外,平假名、片假名和字母的排列方式与直觉非常接近。

请根据您使用的字符串字符集更改 ja-JP。

实际执行

在实际应用中,你很少会对文件名数组进行排序;你几乎总是会对包含文件名的文件对象进行排序。

要对包含文件名的对象数组进行排序,您可以执行以下操作:(files 是一个对象数组,其中包含 name 字段,用于存储文件名。)

  const collator = new Intl.Collator('ja-JP', { numeric: true, sensitivity: 'base' });
  files.sort((a, b) => collator.compare(a.name, b.name));

コメント

タイトルとURLをコピーしました