js删除对象/数组中null、undefined、空对象及空数组方法示例


Posted in Javascript onNovember 14, 2018

这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题。为了兼具所有的种类类型,封装了方法,代码如下:

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也是数组,并且删除完子项,从所属数组中删除
    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删除数项即可,测试数据在上面示例中

js删除对象/数组中null、undefined、空对象及空数组方法示例

-收缩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也是数组,并且删除完子项,从所属数组中删除
    //if (arr) arr.splice(i, 1);
   }
  }
  else if (s == '[object Object]') {
   proccessObject(o);
   //if (arr&&isEmptyObj(o)) arr.splice(i, 1);
  }
 }

附:javascript 判断变量 是否为空null,undefined, 空数组,空对象,空Object,字符串是否为空或全由空白字符组成,数字是否为0,布尔是否为false。由于Object没有length用

Object.keys()适用于数组(IE8不支持此属性),对象 返回可枚举的实例属性名组成的数组来判断是否为空。

利用逻辑判断中or (||)只要有一项为真则不再计算下一个表达式 来实现不管传入的参数是何种类型。只要符合我对空的定义即返回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;
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript 无提示关闭窗口脚本
Aug 17 Javascript
javascript 防止刷新,后退,关闭
Aug 07 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
Oct 23 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
jquery 显示*天*时*分*秒实现时间计时器
May 07 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
Apr 06 Javascript
js使用i18n实现页面国际化的方法
May 09 Javascript
layui选项卡效果实现代码
May 19 Javascript
Babel 入门教程学习笔记
Jun 13 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 #Javascript
Vue源码探究之状态初始化
Nov 14 #Javascript
vue使用laydate时间插件的方法
Nov 14 #Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 #Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 #Javascript
Puppeteer 爬取动态生成的网页实战
Nov 14 #Javascript
React和Vue中监听变量变化的方法
Nov 14 #Javascript
You might like
PR值查询 | PageRank 查询
2006/12/20 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
python文件读取失败怎么处理
2020/06/23 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
日期和时间问题
2015/01/04 面试题
晚宴邀请函范文
2014/01/15 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
家庭贫困证明
2014/09/23 职场文书
精神病医院见习报告
2014/11/03 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
汉字听写大会观后感
2015/06/12 职场文书
校友会致辞
2015/07/30 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android