UNPKG

1.3 kBJavaScriptView Raw
1'use strict';
2
3var utils = require('./utils');
4
5/**
6 * Returns `true` if `value` exists in the given string, array
7 * or object. See [any] for documentation.
8 *
9 * @param {*} `value`
10 * @param {*} `target`
11 * @param {Object} `options`
12 * @api public
13 */
14
15exports.any = function any(value, target) {
16 return utils.any.apply(utils.any, arguments);
17};
18
19/**
20 * Filter the given array or object to contain only the matching values.
21 *
22 * ```js
23 * <%= filter(['foo', 'bar', 'baz']) %>
24 * //=> '["a", "b", "c"]'
25 * ```
26 *
27 * @param {Array} `arr`
28 * @return {Array}
29 * @api public
30 */
31
32exports.filter = function filter(val, fn, context) {
33 if (utils.isEmpty(val)) return '';
34 var iterator = function() {};
35 if (typeof fn === 'string') {
36 var prop = fn;
37 iterator = function(target) {
38 if (typeof target === 'string') {
39 return target === prop;
40 }
41 return target[prop];
42 };
43 } else {
44 iterator = utils.makeIterator(fn, context);
45 }
46 if (typeof val === 'string') {
47 return iterator(val);
48 }
49 if (Array.isArray(val)) {
50 return val.filter(iterator);
51 }
52
53 if (utils.isObject(val)) {
54 var obj = val;
55 var res = {};
56 for (var key in obj) {
57 if (obj.hasOwnProperty(key) && iterator(key)) {
58 res[key] = obj[key];
59 }
60 }
61 return res;
62 }
63};