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