javscript删除对象(包括数组)中值为undefined,null的属性

  javscript删除对象中值为undefined,null的属性,对象属性可以为数组,数组中嵌入数组或者对象,如果为对象删除完所有属性,数组删除全部undefined,null项,则同时删除这个项。

  javscript删除对象(包括数组)中值为undefined,null的属性源代码如下

javscript删除对象(包括数组)中值为undefined,null的属性

<script>
    var 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
        }]
    };
    //判断对象是否没有属性,如{}或者[]
    function isEmptyObj(o) { for (var attr in o) return !1; return !0 }
    function processArray(arr) {
        for (var 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 (var 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) {
        var 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)
</script>

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

javscript删除对象(包括数组)中值为undefined,null的属性

    function processArray(arr) {
        for (var 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) {
        var 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);
        }
    }

 


原创文章,转载请注明出处:javscript删除对象(包括数组)中值为undefined,null的属性

评论(0)Web开发网
阅读(355)喜欢(0)JavaScript/Ajax开发技巧