// 定义类型
const arrayTag = '[object Array]'
const objectTag = '[object Object]'
const nullTag = '[object Null]'
const undefinedTag = '[object Undefined]'
const boolTag = '[object Boolean]'
const dateTag = '[object Date]'
const numberTag = '[object Number]'
const stringTag = '[object String]'
// 需要深度循环
const deep = [arrayTag, objectTag]
/**
* 优化
* 使用while来实现一个通用的forEach遍历
* @param {array} array
* @param {func} iteratee
*/
function forEach(array, iteratee) {
let index = -1
const length = array.length
while (++index < length) {
iteratee(array[index], index)
}
return array
}
// 获取类型
function getType(target) {
return Object.prototype.toString.call(target)
}
// 删除
function canIRemove(target, type) {
switch (type) {
case nullTag:
case undefinedTag:
return true
case stringTag:
return target.trim().length < 1
case objectTag:
return Object.keys(target).length === 0
case arrayTag:
return target.length === 0
case numberTag:
return isNaN(target)
default:
return false
}
}
// 删除空格
function RemoveEmptyFields(obj) {
const type = getType(obj)
const keys = type === arrayTag ? undefined : Object.keys(obj)
// 循环
forEach(keys || obj, (value, key) => {
if (keys) {
key = value
}
if (canIRemove(obj[key], getType(obj[key]))) {
delete obj[key]
} else {
// 循环数组、对象
if (deep.includes(getType(obj[key]))) {
RemoveEmptyFields(obj[key])
if (isEmpty(obj[key])) {
delete obj[key]
}
}
}
})
return obj
}
// 是否为空
function isEmpty(obj) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
return false
}
}
return true
}
const json = {
first_name: 'Sunnie',
last_name: '',
email: 'sunniejs@163.com',
phone: undefined,
gender: null,
age: NaN,
emptyArr: [],
emptyObj: { from: '', code: null },
emptyArr1: [[{ from: '', code: null }], {}],
invitations: [{ from: '', code: null }],
company: { name: '', industries: ['E-commerce', 'finance'], quit: false },
address: {
city: 'ShangHai',
street: ' ',
zip: '',
street: {
value1: 'PuDong',
value2: ' ',
value3: '',
},
},
date: new Date(),
interest: ['english', 'running', 'cycling'],
settle: true,
}
console.log(RemoveEmptyFields(json))
2020-06-23
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。