deep-empty-object
Version:
Check an object, if all or some of its leaf nodes are empty. It detects empty string, empty array, empty object, null, undefined in the target object.
88 lines (81 loc) • 1.88 kB
JavaScript
var isEmpty;
function type (obj) {
return Object.prototype.toString.call(obj).split(/ |\[|\]/g)[2]
}
function walkObjectForAll (obj) {
switch (type(obj)) {
case 'Object':
for (var key in obj) {
walkObjectForAll(obj[key])
}
break
case 'Array':
for (var i = 0; i < obj.length; i++) {
walkObjectForAll(obj[i])
}
break
case 'String':
if (!obj) {
break
} else {
isEmpty = false
return
}
case 'Undefined':
case 'Null':
break
default:
isEmpty = false
return
}
}
function walkObjectForParts (obj) {
switch (type(obj)) {
case 'Object':
if (Object.keys(obj).length) {
for (var key in obj) {
walkObjectForParts(obj[key])
}
} else {
isEmpty = true
return
}
break
case 'Array':
if (obj.length === 0) {
isEmpty = true
return
} else {
for (var i = 0; i < obj.length; i++) {
walkObjectForParts(obj[i])
}
}
break
case 'String':
if (!obj) {
isEmpty = true
return
} else {
break
}
case 'Undefined':
case 'Null':
isEmpty = true
return
break
}
}
function all (obj) {
isEmpty = true
walkObjectForAll(obj)
return isEmpty
}
function some (obj) {
isEmpty = false
walkObjectForParts(obj)
return isEmpty
}
module.exports = {
all: all,
some: some
}