1 | 1 | 'use strict'; |
2 | | |
3 | | // ----- dependencies |
4 | | // --------------------------------------- |
5 | 1 | var sift = require('sift-distance'); |
6 | | |
7 | | // ----- sort function |
8 | | // -- @param arr {Array} strings to sort |
9 | | // -- @param str {String} sort against this |
10 | | // -- @param max {Number} remove items >= max |
11 | | // -- @return {Array} sorted by distance to str |
12 | | // --------------------------------------- |
13 | 1 | function sort(arr, str, max) { |
14 | | |
15 | 3 | if (max) { |
16 | 1 | arr = arr.filter(function(el) { |
17 | 5 | return sift(el, str, {maxDistance: max, maxOffset: sort.maxOffset}) < max; |
18 | | }); |
19 | | } |
20 | | |
21 | 3 | var opts = {maxOffset: sort.maxOffset}; |
22 | | |
23 | 3 | return arr.sort(function(a, b) { |
24 | 17 | return sift(a, str, opts) - sift(b, str, opts); |
25 | | }); |
26 | | |
27 | | } |
28 | | |
29 | 1 | sort.maxOffset = 5; |
30 | | |
31 | 1 | module.exports = sort; |