重新排序字母数字数组

时间:2019-05-15 15:18:27

标签: arrays nightwatch.js

作为我的 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在第一个数组的C-Crosser中之后,但在第二个数组的之前中)其中带有数字的条目在2个数组中的排序方式不同。理想情况下,第二个数组将与第一个数组匹配。

请注意,这些数组是动态的,因此我不能使用“移动”数组条目。

我还以为

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

可能会工作,但是没有。

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以对localeCompare使用options来实现此目的。特别是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)

答案 1 :(得分:0)

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