-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
103 lines (98 loc) · 1.59 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
* @param {array}
* @return {array}
*/
const dict = {
ara: {
ا: 'a',
أ: 'a',
ع: 'ʿ',
ب: 'b',
د: 'd',
ض: 'd',
ظ: 'd',
ذ: 'd',
ت: 't',
ث: 't',
ط: 't',
ز: 'z',
ر: 'r',
س: 's',
ش: 's',
ص: 's',
غ: 'g',
ج: 'g',
ف: 'f',
ق: 'q',
ك: 'k',
ل: 'l',
م: 'm',
ن: 'n',
ه: 'h',
ح: 'h',
خ: 'h',
و: 'u',
ي: 'i',
إ: 'i',
ء: 'ʾ',
ؤ: 'u',
},
hebr: {
א: 'a',
ב: 'b',
ג: 'g',
ד: 'd',
ה: 'h',
ו: 'u',
ז: 's',
ח: 'h',
ט: 't',
י: 'i',
כ: 'k',
ך: 'k',
ל: 'l',
מ: 'm',
ם: 'm',
נ: 'n',
ן: 'n',
ס: 's',
ע: 'ʿ',
פ: 'p',
ף: 'p',
צ: 'z',
ץ: 'z',
ק: 'k',
ר: 'r',
ש: 's',
ת: 't',
},
};
const charsets = {
ara: {
alpha: /[\u0621-\u064A]/gi,
dia: /[\u064B-\u065F]/gi,
},
hebr: {
alpha: /[\u05d0-\u05ea]/gi,
dia: /[\u0591-\u05c7]/gi,
},
};
module.exports = (array) => {
array.sort((a, b) => {
let newA = a;
let newB = b;
Object.keys(charsets).map((lang) => {
newA = newA
.replace(charsets[lang].dia, '') // Diacritics
.replace(charsets[lang].alpha, (c) => dict[lang][c]);
newB = newB
.replace(charsets[lang].dia, '') // Diacritics
.replace(charsets[lang].alpha, (c) => dict[lang][c]);
return null;
});
if (newA.toLowerCase() > newB.toLowerCase()) return 1;
if (newA.toLowerCase() < newB.toLowerCase()) return -1;
return 0;
});
return array;
};