-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
83 lines (68 loc) · 2.31 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
'use strict';
/**
* Will delete the keys of the object which are set to null, undefined or empty string
*
* @param {Object/Array} obj An object or array which needs to be cleaned
* @param {Array} removeTypes Array of values and/or types which needs to be discarded (OPTIONAL)
* @return {Object/Array}
*/
function objCleaner(obj, removeTypes) {
var defaultRemoveTypes = [null, 'undefined', false, '', [], {}];
var key;
function allowEmptyObject() {
var i;
for (i = 0; i < removeTypes.length; i++) {
if (removeTypes[i] instanceof Object && Object.keys(removeTypes[i]).length === 0) {
return false;
}
}
return true;
}
function allowEmptyArray() {
var i;
for (i = 0; i < removeTypes.length; i++) {
if (Array.isArray(removeTypes[i]) && removeTypes[i].length === 0) {
return false;
}
}
return true;
}
if (!(obj instanceof Object || Array.isArray(obj))) {
throw new Error('Argument must be an object or Array');
}
if (typeof removeTypes === 'undefined') {
removeTypes = defaultRemoveTypes;
}
for (key in obj) {
if (typeof obj[key] === 'object') {
if (obj[key] && Object.keys(obj[key]).length) {
obj[key] = objCleaner(obj[key], removeTypes);
} else {
obj[key] = allowEmptyObject() ? obj[key] : null;
}
}
if (Array.isArray(obj[key])) {
if (obj[key] && obj[key].length) {
obj[key] = objCleaner(obj[key], removeTypes);
} else {
obj[key] = allowEmptyArray() ? obj[key] : null;
}
}
if (obj instanceof Object && obj.hasOwnProperty(key)) {
removeTypes.forEach(function (typeVal) {
if (typeof obj[key] === typeVal || obj[key] === typeVal) {
delete obj[key];
}
});
}
if (Array.isArray(obj) && obj.length) {
removeTypes.forEach(function (typeVal, index) {
if (typeof obj[key] === typeVal || obj[key] === typeVal) {
obj.splice(key, 1);
}
});
}
}
return obj;
}
module.exports = objCleaner;