|
1 | | -// Setup |
| 1 | +'use strict' |
| 2 | + |
2 | 3 | var leven = require('leven') |
3 | 4 |
|
4 | | -// Helpers |
5 | 5 | var levMinInAry = function (array, src) { |
6 | 6 | var min = 1000 |
7 | 7 | var len = array.length |
| 8 | + |
8 | 9 | for (var counter = 0; counter < len; counter++) { |
9 | 10 | var val = array[counter] |
| 11 | + |
10 | 12 | if (val && val.length && val.length > 0) { |
11 | 13 | var levScore = leven(src, array[counter]) |
12 | 14 | if (levScore < min) min = levScore |
13 | 15 | } |
14 | 16 | } |
| 17 | + |
15 | 18 | return min |
16 | 19 | } |
17 | 20 |
|
18 | | -// Export main function |
19 | 21 | module.exports = function (ary, src1, key1, src2, key2) { |
20 | 22 | return ary.sort(function (a, b) { |
21 | 23 | if (key1 instanceof Array) { |
22 | 24 | var aLev = levMinInAry(key1.map(function (k) { return a[k] }), src1) |
23 | 25 | var bLev = levMinInAry(key1.map(function (k) { return b[k] }), src1) |
| 26 | + |
24 | 27 | return aLev - bLev |
25 | 28 | } |
| 29 | + |
26 | 30 | if (!key1 && !key2) return leven(src1, a) < leven(src1, b) ? -1 : 1 |
| 31 | + |
27 | 32 | if (!key2) return leven(src1, a[key1]) < leven(src1, b[key1]) ? -1 : 1 |
| 33 | + |
28 | 34 | var score = 0 |
29 | 35 | var a1 = leven(src1, a[key1]) |
30 | 36 | var b1 = leven(src1, b[key1]) |
31 | 37 | var a2 = leven(src2, a[key2]) |
32 | 38 | var b2 = leven(src2, b[key2]) |
| 39 | + |
33 | 40 | if (a1 < b1) score = score - 10 |
34 | 41 | if (a1 > b1) score = score + 10 |
35 | 42 | if (a2 < b2) score = score - 1 |
36 | 43 | if (a2 > b2) score = score + 1 |
| 44 | + |
37 | 45 | return score |
38 | 46 | }) |
39 | 47 | } |
0 commit comments