UNPKG

vue2-filter-list

Version:
69 lines (64 loc) 1.49 kB
import util from '../util/index' /** * Filter filter for arrays * * @param {Array} arr * @param {String} prop * @param {String|Number} search */ function filterBy (arr, search) { var arr = util.convertArray(arr) if (search == null) { return arr } if (typeof search === 'function') { return arr.filter(search) } // cast to lowercase string search = ('' + search).toLowerCase() var n = 2 // extract and flatten keys var keys = Array.prototype.concat.apply([], util.toArray(arguments, n)) var res = [] var item, key, val, j for (var i = 0, l = arr.length; i < l; i++) { item = arr[i] val = (item && item.$value) || item j = keys.length if (j) { while (j--) { key = keys[j] if ((key === '$key' && contains(item.$key, search)) || contains(util.getPath(val, key), search)) { res.push(item) break } } } else if (contains(item, search)) { res.push(item) } } return res } function contains (val, search) { var i if (util.isPlainObject(val)) { var keys = Object.keys(val) i = keys.length while (i--) { if (contains(val[keys[i]], search)) { return true } } } else if (util.isArray(val)) { i = val.length while (i--) { if (contains(val[i], search)) { return true } } } else if (val != null) { return val.toString().toLowerCase().indexOf(search) > -1 } } export default filterBy