这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题。为了兼具所有的种类类型,封装了方法,代码如下:

let obj = {
        a: {
            a_1: 'qwe',
            a_2: undefined,
            a_3: function (a, b) {
                return a + b;
            },
            a_4: {
                a_4_1: 'qwe',
                a_4_2: undefined,
                a_4_3: function (a, b) {
                    return a + b;
                },
                a_4_4: {
                    a_4_4_1: undefined,
                    a_4_4_2: undefined,
                    a_4_4_3: undefined,
                    a_4_4_4: {
                        a_4_4_4_1: undefined,
                        a_4_4_4_2: undefined,
                        a_4_4_4_3: undefined,
                        a_4_4_4_4: undefined,
                        a_4_4_4_5: undefined,
                        a_4_4_4_6: undefined
                    }
                }
            }
        },
        b: [{
            a_1: 'qwe',
            a_2: undefined,
            a_3: function (a, b) {
                return a + b;
            },
            a_4: {
                a_4_1: 'qwe',
                a_4_2: undefined,
                a_4_3: function (a, b) {
                    return a + b;
                },
                a_4_4: {
                    a_4_4_1: undefined,
                    a_4_4_2: undefined,
                    a_4_4_3: undefined,
                    a_4_4_4: {
                        a_4_4_4_1: undefined,
                        a_4_4_4_2: undefined,
                        a_4_4_4_3: undefined,
                        a_4_4_4_4: undefined,
                        a_4_4_4_5: undefined,
                        a_4_4_4_6: undefined
                    }
                }
            }
        }],
        c: [{
            a: undefined,
            b: undefined,
            c: undefined,
            d: undefined
        }, {
            a: undefined,
            b: undefined,
            c: undefined,
            d: undefined
        }]
    };

以下是javaScript部分:

//判断对象是否没有属性,如{}或者[]
    function isEmptyObj(o) { for (let attr in o) return !1; return !0 }
    function processArray(arr) {
        for (let i = arr.length - 1; i >= 0; i--) {
            if (arr[i] === null || arr[i] === undefined) arr.splice(i, 1);
            else if (typeof arr[i] == 'object') removeNullItem(arr[i], arr, i);
        }
        return arr.length == 0
    }
    function proccessObject(o) {
        for (let attr in o) {
            if (o[attr] === null || o[attr] === undefined) delete o[attr];
            else if(typeof o[attr]=='object') {
                removeNullItem(o[attr]);
                if (isEmptyObj(o[attr])) delete o[attr];
            }
        }
    }
    function removeNullItem(o,arr,i) {
        let s = ({}).toString.call(o);
        if (s == '[object Array]') {
            if (processArray(o) === true) {//o也是数组,并且删除完子项,从所属数组中删除
                if (arr) arr.splice(i, 1);
            }
        }
        else if (s == '[object Object]') {
            proccessObject(o);
            if (arr&&isEmptyObj(o)) arr.splice(i, 1);
        }
    }
    removeNullItem(obj)
    console.log(obj)

如果只处理对象null,undefined项,不移除数组中undefined,null的项,保持数组长度则去掉removeNullItem,processArray删除数项即可,测试数据在上面示例中

-收缩JavaScript代码
    function processArray(arr) {
        for (let i = arr.length - 1; i >= 0; i--) {
            /*if (arr[i] === null || arr[i] === undefined) arr.splice(i, 1);
            else */if (typeof arr[i] == 'object') removeNullItem(arr[i], arr, i);
        }
        return arr.length == 0
    }
    function removeNullItem(o,arr,i) {
        let s = ({}).toString.call(o);
        if (s == '[object Array]') {
            if (processArray(o) === true) {//o也是数组,并且删除完子项,从所属数组中删除
                //if (arr) arr.splice(i, 1);
            }
        }
        else if (s == '[object Object]') {
            proccessObject(o);
            //if (arr&&isEmptyObj(o)) arr.splice(i, 1);
        }
    }

javaScript删除对象、数组中的null、undefined、空对象、空数组方法的更多相关文章

  1. JS数组常用函数以及查找数组中是否有重复元素的三种常用方法

    阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法  1. var ary = new Array(&qu ...

  2. 剑指Offer 28. 数组中出现次数超过一半的数字 (数组)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  3. C基础知识(3):指针--概念、数组中指针的递增/递减、指针数组&数组指针、指向指针的指针

    指针是一个变量,其值为另一个变量的地址. 所有指针的值的实际数据类型,不管是整型.浮点型.字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数. 下面从4个代码例子分别讲述以下 ...

  4. JS删除数组中某一项或几项的方法汇总

    1.JS中的splice方法 splice(index, len, [item])    //注意:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值. ...

  5. 区分js中的null,undefined,"",0和false

    console.log(typeof null);//object console.log(typeof undefined);//undefined console.log(typeof " ...

  6. js中,null, '',undefined的区别

    在js中有三种值都可以代表false  "",null,undefined 那么他们之间到底有什么区别呢 首先我们先看这三种值得类型 ""代表了一个没有字符的字 ...

  7. js实现往数组中添加非存在的对象,如果存在就改变键值。

    let arr = [] // 数组中元素数据类型为{name: 'bb', age: 12} // 现在需求是,将每次获得的新对象{name: '', age: }push到数组arr中,但前提是数 ...

  8. js 数组 添加或删除 元素 splice 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素 filter

    里面可以用 箭头函数 splice         删除 增加 数组 中元素 操作数组 filter 创建新数组  检查指定数组中符合条件的所有元素

  9. js中 null, undefined, 0,空字符串,false,不全等比较

    null == undefined // true null == ''  // false null == 0 // false null == false // false undefined = ...

随机推荐

  1. nginx高性能WEB服务器系列之九--nginx运维故障日常解决方案

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  2. [蓝桥杯][2016年第七届真题]路径之谜(dfs)

    题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角. ...

  3. js计算数值

    1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.f ...

  4. 《The One!团队》第一次作业:团队亮相

    项目 内容 作业所属课程 http://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/10687492.h ...

  5. python爬虫专栏学习

    知乎的一个讲python的专栏,其中爬虫的几篇文章,偏入门解释,快速看了一遍. 入门 爬虫基本原理:用最简单的代码抓取最基础的网页,展现爬虫的最基本思想,让读者知道爬虫其实是一件非常简单的事情. 爬虫 ...

  6. 使用AChartEngine画动态曲线图

    AChartEngine是一个开源的Android图表库,可以用来画折线图.平滑折线图.饼图.直方图等等.使用简单,功能强大. AChartEngine官网:http://www.achartengi ...

  7. CentOS6.5安装testlink1.9.14

    前提条件:准备一台CentOS6.5虚拟机,配置好IP,关闭iptables和selinux. 这里提供上我的云盘软件,可以去这里下载:http://pan.baidu.com/s/1qXymele ...

  8. GridView控件详解

    一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件 ...

  9. selenium+python(模块化驱动测试)

    模块化驱动测试,就是借鉴编程语言中模块化的思想,把重复的操作独立成功公告模块,懂用例执行过程中需要用到这一模块操作时则被调用,这样可以极大的消除重复从而提高测试用例的可维护性 下面具体以126邮箱为例 ...

  10. IDEA里运行代码时出现Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger的解决办法(图文详解)

    不多说,直接上干货! 问题详情 运行出现log4j的问题 -classpath "C:\Program Files\Java\jdk1.8.0_66\jre\lib\charsets.jar ...