Skip to content

Commit af6d06c

Browse files
committed
Handle falsy values
1 parent be5e8fb commit af6d06c

File tree

3 files changed

+46
-23
lines changed

3 files changed

+46
-23
lines changed

index.js

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
'use strict'
22

3-
var leven = require('leven')
3+
var levenSrc = require('leven')
4+
5+
var maxDist = function (a, b, c) {
6+
var aLen = (a || '').length
7+
var bLen = (b || '').length
8+
9+
return (aLen > bLen ? aLen : bLen) || 1
10+
}
11+
12+
var leven = function (a, b) {
13+
if (a === b) return 0
14+
if (!a || !b) return maxDist(a, b)
15+
16+
return levenSrc(a, b)
17+
}
18+
19+
var levSort = function (src, a, b) {
20+
if (!a) return 1
21+
if (!b) return -1
22+
23+
a = leven(src, a)
24+
b = leven(src, b)
25+
26+
return a - b
27+
}
428

529
var levMinInAry = function (array, src) {
630
var min = 1000
@@ -19,29 +43,22 @@ var levMinInAry = function (array, src) {
1943
}
2044

2145
module.exports = function (ary, src1, key1, src2, key2) {
22-
return ary.sort(function (a, b) {
46+
var sorted = ary.sort(function (a, b) {
2347
if (key1 instanceof Array) {
2448
var aLev = levMinInAry(key1.map(function (k) { return a[k] }), src1)
2549
var bLev = levMinInAry(key1.map(function (k) { return b[k] }), src1)
2650

2751
return aLev - bLev
2852
}
2953

30-
if (!key1 && !key2) return leven(src1, a) < leven(src1, b) ? -1 : 1
31-
32-
if (!key2) return leven(src1, a[key1]) < leven(src1, b[key1]) ? -1 : 1
54+
if (!key1 && !key2) return levSort(src1, a, b)
3355

34-
var score = 0
35-
var a1 = leven(src1, a[key1])
36-
var b1 = leven(src1, b[key1])
37-
var a2 = leven(src2, a[key2])
38-
var b2 = leven(src2, b[key2])
56+
if (!key2) return levSort(src1, a[key1], b[key1])
3957

40-
if (a1 < b1) score = score - 10
41-
if (a1 > b1) score = score + 10
42-
if (a2 < b2) score = score - 1
43-
if (a2 > b2) score = score + 1
58+
var score = levSort(src1, a[key1], b[key1]) * 10
4459

45-
return score
60+
return score + levSort(src2, a[key2], b[key2])
4661
})
62+
63+
return sorted
4764
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
},
4747
"license": "MIT",
4848
"dependencies": {
49-
"leven": "^2.1.0"
49+
"leven": "^3.1.0"
5050
},
5151
"devDependencies": {
5252
"mvt": "^2.0.1"

test.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ runTests('Testing leven-sort', () => {
1111
'Carl Martinez',
1212
'Roger Davis',
1313
'William George',
14+
null,
1415
'Andrew Torres',
1516
'Billy Campbell',
1617
'Alan King',
@@ -28,9 +29,10 @@ runTests('Testing leven-sort', () => {
2829
'William George',
2930
'Carl Martinez',
3031
'Roger Davis',
31-
'Dennis Smith',
3232
'Benjamin Wilson',
33-
'Andrew Torres'
33+
'Dennis Smith',
34+
'Andrew Torres',
35+
null
3436
]
3537

3638
const levSorted = levenSort(nameAry, sourceName)
@@ -48,6 +50,7 @@ runTests('Testing leven-sort', () => {
4850
{ first: 'William', last: 'George' },
4951
{ first: 'Andrew', last: 'Torres' },
5052
{ first: 'Billy', last: 'Campbell' },
53+
{ first: null, last: null },
5154
{ first: 'Alan', last: 'King' },
5255
{ first: 'Benjamin', last: 'Wilson' },
5356
{ first: 'Bill', last: 'Griffin' },
@@ -60,12 +63,13 @@ runTests('Testing leven-sort', () => {
6063
{ first: 'Billy', last: 'Griffith' },
6164
{ first: 'Billy', last: 'Campbell' },
6265
{ first: 'Carl', last: 'Martinez' },
63-
{ first: 'William', last: 'George' },
6466
{ first: 'Alan', last: 'King' },
67+
{ first: 'William', last: 'George' },
6568
{ first: 'Roger', last: 'Davis' },
6669
{ first: 'Dennis', last: 'Smith' },
6770
{ first: 'Andrew', last: 'Torres' },
68-
{ first: 'Benjamin', last: 'Wilson' }
71+
{ first: 'Benjamin', last: 'Wilson' },
72+
{ first: null, last: null }
6973
]
7074

7175
const levSorted = levenSort(nameObjAry, sourceFirst, 'first', sourceLast, 'last')
@@ -83,6 +87,7 @@ runTests('Testing leven-sort', () => {
8387
{ first: 'Andrew', last: 'Torres' },
8488
{ first: 'Billy', last: 'Campbell' },
8589
{ first: 'Alan', last: 'King' },
90+
{ first: null, last: null },
8691
{ first: 'Benjamin', last: 'Wilson' },
8792
{ first: 'Bill', last: 'Griffin' },
8893
{ first: 'Dennis', last: 'Smith' },
@@ -91,15 +96,16 @@ runTests('Testing leven-sort', () => {
9196

9297
const expect = [
9398
{ first: 'Bill', last: 'Griffin' },
94-
{ first: 'Billy', last: 'Campbell' },
9599
{ first: 'Billy', last: 'Griffith' },
100+
{ first: 'Billy', last: 'Campbell' },
96101
{ first: 'Carl', last: 'Martinez' },
97102
{ first: 'Alan', last: 'King' },
98-
{ first: 'William', last: 'George' },
99103
{ first: 'Benjamin', last: 'Wilson' },
104+
{ first: 'William', last: 'George' },
100105
{ first: 'Dennis', last: 'Smith' },
101106
{ first: 'Roger', last: 'Davis' },
102-
{ first: 'Andrew', last: 'Torres' }
107+
{ first: 'Andrew', last: 'Torres' },
108+
{ first: null, last: null }
103109
]
104110

105111
const levSorted = levenSort(nameObjAry, source, ['first', 'last'])

0 commit comments

Comments
 (0)