作为我的 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());
});
可能会工作,但是没有。
任何帮助将不胜感激。
谢谢
答案 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);;