对任意结构和的层级的对象数据中的空字符串和undefined转为null

写这个API的目的是因为:如果前端传一个对象数据给后端(如obj: {a: ''}),后端会把空字符串也当做值(而非null)作为查询条件,因此常常会无法搜到想要的结果(始终觉得后端这问题应该很容易解决,但始终没解决),因此还是打算抽个时间封装个可以自动转换空字符串或undefined的API。这个API 可以对数据、对象混合的机构数据做做处理,不限数据层级。

函数相关封装代码:

//获取数据类型
const dataType = data => {
    return Object.prototype.toString.call(data)
}

// 空字符串转null
const toNUll = v => {
    let res = '';
    let str = dataType(v) === "[object Undefined]" ? null : v.replace(/\s+/g, '');
    return res = str == '' ? null : str;
}

// 对于数据项是数组情况做处理
const array = d =>{
    let fun = value => {
        value.length && value.forEach(v => {
            if("[object Object]" === dataType(v)){
                emptyCharToNull(v)
            }else if("[object Array]" === dataType(v)){
                fun(v)
            }
        })
    }
    fun(d)
}

// 对于空字符串转成null
const emptyCharToNull = v => {
    let type = dataType(v);
    //  如果是对象或字符串的情况下
    if("[object Object]" === type){
        Object.keys(v).forEach(key => {
            let item = v[key];
            let itemType = dataType(item);
            if("[object String]" === itemType || "[object Undefined]" === itemType){
                v[key] = toNUll(item)
            }else if("[object Object]" === itemType){
                emptyCharToNull(v[key])
            }else if("[object Array]" === itemType){
                array(v[key])
            }
        })
    }else if("[object Array]" === type){ // 如果是数组的情况下
        array(v)
    }
}

// 排除空数据并转成 用于条件搜索 或 数据提交
export const excludeEmptyToNull = target => {
    let type = dataType(target);
    if("[object String]" === type || "[object Undefined]" === type){
        return toNUll(target)
    }
    emptyCharToNull(target)
    return target
}

模拟数据

let mockData = {
    test: [
        'a',
        {
            b: '1',
            c: {
                d: 2,
                e: '',
                ee: [
                    {
                        eee: ''
                    }
                ]
            },
            f: ' 11  22',
            g: '',
            h: undefined,
            i: [
                'k',
                {
                    kk: '123',
                    kkk: ''
                }
            ]
        }
    ],
    gg: ''
}

运行结果

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值