UNPKG

1.13 kBJavaScriptView Raw
1function isPlainObject(o) {
2 return o!==null && 'object' === typeof o;
3}
4
5function isCollection(o) {
6 return Array.isArray(o) || isPlainObject(o);
7}
8
9function filter(value, fn, pkey) {
10 if (Array.isArray(value)) return filterArray(value, fn, pkey);
11 else if (isPlainObject(value)) return filterObject(value, fn, pkey);
12 return value;
13}
14
15function filterObject(obj, fn, pkey) {
16 let newObj = {};
17 let key;
18 let value;
19
20 for (key in obj) {
21 value = filter(obj[key], fn, key);
22 let newKey = fn.call(obj, value, key, obj, pkey);
23 if (newKey) {
24 if (value !== obj[key] && !isCollection(value)) value = obj[key];
25 if (typeof newKey === 'string') newObj[newKey] = value;
26 else newObj[key] = value;
27 }
28 }
29
30 return newObj;
31}
32
33function filterArray(array, fn, pkey) {
34 let filtered = [];
35
36 array.forEach(function (value, index, array) {
37 value = filter(value, fn, index);
38 if (fn.call(array, value, index, array, pkey)) {
39 if (value !== array[index] && !isCollection(value)) value = array[index];
40 filtered.push(value);
41 }
42 });
43
44 return filtered;
45}
46
47export {filter as default}