重新排序字母数字数组

Re-ordering alpha-numerical array

作为我的 nightwatchjs 测试的一部分,我对两个数组进行 运行 比较,因此如果它们相同,则测试将通过.

所以我的第一个数组是; C-Crosser', 'C-Zero', 'C1', 'C2', 'C3', 'C3 Aircross', 'C3 Picasso', 'C3 Pluriel', 'C3 XTR', 'C4', 'C4 Cactus', 'C4 Picasso', 'C4 SpaceTourer', 'C5', 'C6', 'C8', 'DS3', 'DS4', 'DS5', 'Dispatch Combi',

第二个数组是;

'C1',
  'C2',
  'C3',
  'C3 Aircross',
  'C3 Picasso',
  'C3 Pluriel',
  'C3 XTR',
  'C4',
  'C4 Cactus',
  'C4 Picasso',
  'C4 SpaceTourer',
  'C5',
  'C6',
  'C8',
  'C-Crosser',
  'C-Zero',
  'Dispatch Combi',
  'DS3',
  'DS4',
  'DS5',

因此,字母数字值似乎需要排序(例如,C1 在第一个数组中 after C-Crosser 中列出,但在 before 在第二个数组中)作为一个带有数字的条目在 2 个数组中排序不同。理想情况下,第二个数组将匹配第一个数组。

请注意,这些数组是动态的,所以我不能使用 'move' 数组条目。

另外,我认为

myarray.sort(function (a, b) {
   return a.toLowerCase().localeCompare(b.toLowerCase());
 });  

可能有用,但没用。

如有任何帮助,我们将不胜感激。

谢谢

你应该使用 lodash 和方法 _.differenceWith(first_arr, second_arr, _.isEqual);

您可以将 options 用于 localeCompare 来实现此目的。特别是 numeric: true, ignorePunctuation: true 像这样:

const data = [ 'C-Crosser', 'C-Zero', 'C1', 'C2', 'C3', 'C3 Aircross', 'C3 Picasso', 'C3 Pluriel', 'C3 XTR', 'C4', 'C4 Cactus', 'C4 Picasso', 'C4 SpaceTourer', 'C5', 'C6', 'C8', 'DS3', 'DS4', 'DS5', 'Dispatch Combi' ]

let result = data.sort((a,b) => 
  a.toLowerCase().localeCompare(b.toLowerCase(), 'en', { 
  numeric: true, ignorePunctuation: true 
}))

console.log(result)