美文网首页
2020-06-23

2020-06-23

作者: 程序媛花花 | 来源:发表于2020-06-23 11:59 被阅读0次
// 定义类型
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-24

    2020-06-23 2020-06-22 2020-06-21 2020-06-20 2020-06-19 20...

  • 2020-05-07

    你财富技术部Release Note 发布版本: 发布窗口:2020-06-23(星期二) 上线内容: 1.优化:...

  • 记录 Zotero 结合坚果云同步的一个坑?是 Mac 的坑!

    2020-06-23 Tuesday @ SG 使用 Zotero + 坚果云同步来管理文献已经有好长时间了,今天...

  • 日期加上时间

    用来处理前端传回的时间段如"2020-06-07"和"2020-06-23" 用mybatis用between查询...

  • macOS能跑iOS程序,iOS 能跑小程序

    更新:[2020-06-23 03:26:21] 注意:查看正文前,请先查看文末的评论,以确认是否有勘误。 本文提...

  • 考霸训练营作业

    2020-06-23 Day3 问答 ① 建立专家水准的方法是什么? 从一开始就用专家水准来要求自己,把进步本...

  • 175 关于长期思维

    #每日精进175/200 2020-06-23 辉哥的《人生护城河》一书中讲到了,我们需要远眺未来30年之后的状态...

  • 未曾清贫难成人,不经打击老天真

    2020-06-23待到囊中羞涩时,怒指乾坤错.... 看着股票账户每日不断增长的数字,我竟然开始了迷茫。我是飘了吗?

  • 2020-06-23|感恩日记

    2020-06-23|感恩日记 生命中还有关心自己的人在,是一种幸福。 感恩生命中的她(他)们,伴我成长,教我生活...

  • 20200623宽基指数估值表

    ​估值日期:2020-06-23 颜色说明: 1、红色:说明当前指数估值比较高,不建议童鞋们去购买红色背景的相关指...

网友评论

      本文标题:2020-06-23

      本文链接:https://www.haomeiwen.com/subject/vsocfktx.html