js刪除對(duì)象/數(shù)組中null、undefined、空對(duì)象及空數(shù)組方法示例
這兩天在項(xiàng)目中遇到后臺(tái)需要傳的數(shù)據(jù)為不能有null,不能有空值,而這個(gè)數(shù)據(jù)又是一個(gè)龐大的對(duì)象,對(duì)組集合,所以寫了個(gè)方法來(lái)解決這個(gè)問(wèn)題。為了兼具所有的種類類型,封裝了方法,代碼如下:
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部分:
//判斷對(duì)象是否沒(méi)有屬性,如{}或者[] 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ù)組,并且刪除完子項(xiàng),從所屬數(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)
如果只處理對(duì)象null,undefined項(xiàng),不移除數(shù)組中undefined,null的項(xiàng),保持?jǐn)?shù)組長(zhǎng)度則去掉removeNullItem,processArray刪除數(shù)項(xiàng)即可,測(cè)試數(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ù)組,并且刪除完子項(xiàng),從所屬數(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ù)組,空對(duì)象,空Object,字符串是否為空或全由空白字符組成,數(shù)字是否為0,布爾是否為false。由于Object沒(méi)有l(wèi)ength用
Object.keys()適用于數(shù)組(IE8不支持此屬性),對(duì)象 返回可枚舉的實(shí)例屬性名組成的數(shù)組來(lái)判斷是否為空。
利用邏輯判斷中or (||)只要有一項(xiàng)為真則不再計(jì)算下一個(gè)表達(dá)式 來(lái)實(shí)現(xiàn)不管傳入的參數(shù)是何種類型。只要符合我對(duì)空的定義即返回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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- JavaScript判斷空值、NULL、undefined的方法對(duì)比
- js如何刪除對(duì)象/數(shù)組中null、undefined、空對(duì)象及空數(shù)組實(shí)例代碼
- JavaScript中的null和undefined用法解析
- JavaScript中undefined和null的區(qū)別
- JavaScript基本類型值-Undefined、Null、Boolean
- 有關(guān)JS中的0,null,undefined,[],{},'''''''''''''''',false之間的關(guān)系
- 兩個(gè)JavaScript中的特殊值null和undefined詳解
相關(guān)文章
微信小程序調(diào)用后臺(tái)service教程詳解
這篇文章主要介紹了微信小程序調(diào)用后臺(tái)service教程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11原生JS 實(shí)現(xiàn)的input輸入時(shí)表格過(guò)濾操作示例
這篇文章主要介紹了原生JS 實(shí)現(xiàn)的input輸入時(shí)表格過(guò)濾操作,結(jié)合實(shí)例形式分析了JavaScript基于頁(yè)面元素遍歷、運(yùn)算、判斷實(shí)現(xiàn)的表格過(guò)濾相關(guān)操作技巧,需要的朋友可以參考下2019-08-08javascript通過(guò)className來(lái)獲取元素的簡(jiǎn)單示例代碼
本篇文章主要是對(duì)javascript通過(guò)className來(lái)獲取元素的簡(jiǎn)單示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析
這篇文章主要介紹了JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析,需要的朋友可以參考下2018-07-07

webpack幾種手動(dòng)實(shí)現(xiàn)HMR的方式

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

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

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

JavaScript–Apple設(shè)備檢測(cè)示例代碼