js刪除對象/數(shù)組中null、undefined、空對象及空數(shù)組方法示例
這兩天在項目中遇到后臺需要傳的數(shù)據(jù)為不能有null,不能有空值,而這個數(shù)據(jù)又是一個龐大的對象,對組集合,所以寫了個方法來解決這個問題。為了兼具所有的種類類型,封裝了方法,代碼如下:
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也是數(shù)組,并且刪除完子項,從所屬數(shù)組中刪除 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項,不移除數(shù)組中undefined,null的項,保持?jǐn)?shù)組長度則去掉removeNullItem,processArray刪除數(shù)項即可,測試數(shù)據(jù)在上面示例中
-收縮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也是數(shù)組,并且刪除完子項,從所屬數(shù)組中刪除 //if (arr) arr.splice(i, 1); } } else if (s == '[object Object]') { proccessObject(o); //if (arr&&isEmptyObj(o)) arr.splice(i, 1); } }
附:javascript 判斷變量 是否為空null,undefined, 空數(shù)組,空對象,空Object,字符串是否為空或全由空白字符組成,數(shù)字是否為0,布爾是否為false。由于Object沒有l(wèi)ength用
Object.keys()適用于數(shù)組(IE8不支持此屬性),對象 返回可枚舉的實例屬性名組成的數(shù)組來判斷是否為空。
利用邏輯判斷中or (||)只要有一項為真則不再計算下一個表達(dá)式 來實現(xiàn)不管傳入的參數(shù)是何種類型。只要符合我對空的定義即返回true。
function IsNothing(e) { var isNt = e === 0 || e === false || e === null || e === undefined || Object.keys(e).length === 0 || /^\s*$/gim.test(e.toString()); return isNt; }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
原生JS 實現(xiàn)的input輸入時表格過濾操作示例
這篇文章主要介紹了原生JS 實現(xiàn)的input輸入時表格過濾操作,結(jié)合實例形式分析了JavaScript基于頁面元素遍歷、運算、判斷實現(xiàn)的表格過濾相關(guān)操作技巧,需要的朋友可以參考下2019-08-08javascript通過className來獲取元素的簡單示例代碼
本篇文章主要是對javascript通過className來獲取元素的簡單示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析
這篇文章主要介紹了JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析,需要的朋友可以參考下2018-07-07

JavaScript實現(xiàn)廣告的關(guān)閉與顯示效果實例

微信小程序分享功能onShareAppMessage(options)用法分析

eval(function(p,a,c,k,e,d)系列解密javascript程序