1. 程式人生 > >javaScript刪除物件,陣列中的null,undefined,空物件,空陣列方法

javaScript刪除物件,陣列中的null,undefined,空物件,空陣列方法

這兩天在專案中遇到後臺需要傳的資料為不能有null,不能有空值,而這個資料又是一個龐大的物件,對組集合,所以寫了個方法來解決這個問題。為了兼具所有的種類型別,封裝了方法,程式碼如下:

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        }]    };

以下是javaScript部分: 

//判斷物件是否沒有屬性,如{}或者[]   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)

如果只處理物件null,undefined項,不移除陣列中undefined,null的項,保持陣列長度則去掉removeNullItem,processArray刪除數項即可,測試資料在上面示例中

-收縮JavaScript程式碼     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);        }    }