JavaScript中如何删除对象/数组中null、undefined、空对象及空数组实例代码

news/2024/4/24 20:56:14/

如下,对于一个多层嵌套的数据结构:例如
要做的就是删除所有value为空,数组为空,对象为空的字段

const querys = {name: '测试',httpMethod: '',httpHeaders: [{key: 'Accept',value: 'test',},],restParams: [{key: '',value: '',},],body: {bodyType: '',formDataList: [{contentType: '',key: '',value: '',},],},microtask: {bodyType: 'javascript',formDataList: [{key: '2',value: '4',},],},
};

通过处理,希望得到 以下结构:
在这里插入图片描述

{name: '测试',httpHeaders: [{key: 'Accept',value: 'test',},],microtask: {bodyType: 'javascript',formDataList: [{key: '2',value: '4',},],},
}

第一:过滤各种空数据的字段,比如,string、null、undefined、[]、{}

使用这个方法:(注意调用两遍)

export const delEmptyQueryNodes = (obj = {}) => {Object.keys(obj).forEach((key) => {let value = obj[key];value && typeof value === 'object' && delEmptyQueryNodes(value);(value === '' || value === null || value === undefined || value.length === 0 || Object.keys(value).length === 0) && delete obj[key];});return obj;
};

调用方法:(res就是过滤之后你要的数据)

let res = delEmptyQueryNodes(delEmptyQueryNodes(params));

第二:删除对象中值为空或null或undefined的所有属性(简单方法)

1、首先写一个方法判断当前值为空

function isEmpty(obj) {if (typeof obj === 'undefined' || obj === null || obj === '') return true;return false
}

2、删除对象中值为空的所有属性

var formData = {a: "duo",b: 0,c: undefined,d: null,e: null
}function preProcessData(formData) {Object.keys(formData).forEach(item=>{if(this.isEmpty(formData[item])) {delete formData[item];}})return formData;
}

第三:ES6-使用js删除对象中带有null和undefined值的数据

  const requestParams= {current: 1,pageSize:10,username: '',usercode: null}// 希望得到以下数据const requestParams= {current: 1,pageSize:10,}
 let newParams = Object.keys(requestParams).filter((key) => requestParams[key] !== null && requestParams[key] !== undefined && requestParams[key] !== '').reduce((acc, key) => ({ ...acc, [key]: requestParams[key] }), {});
console.log(newParams)

代码的原理是通过Object.keys遍历对象中的key值,通过filter方法筛选出值不为null和undefined以及为空的数据。这个方法中最灵魂的地方在于用到了reduce高阶函数,reduce返回值的第二个参数传入{}初始值,通过reduce内部循环,将符合条件的数组中的属性和属性值添加到对象中去,最终返回出一个我们想要的不带空值的对象。


http://www.ppmy.cn/news/47848.html

相关文章

markdown基本语法

来自神秘人儿的投稿! markdown的使用,可以参考https://markdown.com.cn/basic-syntax/ 标题:用 # 表示 段落:enter即可,两端之间有一个空行 换行:一行的末尾加两个或者多个空格,两端之间没有…

Python双向循环链表的操作

目录 一、双向循环链表 双向循环链表图 二、双向循环链表的操作 1、判断链表是否为空 2,链表长度 3,遍历整个链表 4,在链表头部添加元素 5、链表尾部添加元素 6,在指定位置插入元素 7,修改指定位置的元素 8&a…

Java 并发工具合集 JUC 大爆发!!!

并发工具类 通常我们所说的并发包也就是 java.util.concurrent (JUC),集中了 Java 并发的各种工具类, 合理地使用它们能帮忙我们快速地完成功能 。 1. CountDownLatch CountDownLatch 是一个同步计数器,初始化的时候 传入需要计数的线程等待数…

js和jQuery知识点总结

目录 一.jQuery知识点梳理 1.jQuery入门&选择器 案例1 表格隔行换色 二.$工具方法&属性&CSS 案例2:实现全选功能 三.筛选&过滤&位置 案例3.实现返回顶部功能 四.事件&效果 二.JavaScript知识点梳理 一.js核心语法 二.函数和wind…

29考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略MATLAB程序-日前日内实时+需求响应+协调调度

资源地址: 29考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略MATLAB程序-日前日内实时需求响应协调调度-Matlab文档类资源-CSDN文库 参考文献: 考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略——金力 主要内容&…

【数据聚类|深度聚类】Heterogeneous Tri-stream Clustering Network(HTCN)论文研读

文章目录 AbstractIntroductionRelated WorkDeep ClusteringSelf-supervised LearningProposed FrameworkFramework OverviewInstance-level ContrastivenessCluster-level ContrastivenessOverall Loss FunctionImplementation DetailsExperimentsDatasets and Evaluation Met…

尚硅谷_宋红康_第17章_反射机制

第17章_反射机制 本章专题与脉络 1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致。 Object obj new String(“hello”); obj.ge…

AgentGPT,免费易用的 Auto-GPT 平替

你问 ChatGPT 答,属于单线问答式交互。但如果你问Auto-GPT,他会分解成N个任务,并且在遇到任务无法完成后,会尝试其它的方式来完成任务,很像老板交待你一个任务,中间的过程他不过问,遇到问题你自…

蓝桥杯题的题

冰雹数【模拟, 2016, 省赛】 任意给定一个正整数 N, 如果是偶数,执行: N/2; 如果是奇数,执行: N31, 生成的新的数字再执行同样的动作,循环往复。 通过观察发现,这个…

Android屏幕适配dp、px两套解决办法

最新最全文章(2018-08-25):Android dp方式的屏幕适配-原理(后期补充完整讲解)_手机dp输出是横屏还是竖屏_android阿杜的博客-CSDN博客 “又是屏幕适配,这类文章网上不是很多了吗?” 我也很遗憾,确实又是老问题。但本文重点对网上…

三行Python代码,让数据处理速度提高2到6倍

本文可以教你仅使用 3 行代码,大大加快数据预处理的速度。 Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时,一些问题就会显现…… 在默认情况下,…

二叉排序树的插入和删除操作(python实现)

二叉排序树的插入和删除操作都是在保持二叉排序树特性的前提下进行的。 插入操作: 在二叉排序树中插入一个新节点时,先比较新节点的值和当前节点的值的大小关系,若小于当前节点,则继续在当前节点的左子树中查找;若大…

ODrive运放电路的分析和替代方案

SimpleFOC、ODrive和VESC教程链接汇总:请点击   一、电流采样范围的计算 这是一个典型的Lowside电流采样运放电路,下图: 实际运用中会增加阻容做滤波处理。(SP1-SN1)就是电流在R5采样电阻上产生的压降&#xff0c…

怎么成为真正的程序员 ?我来给大家分享我学Java的经历和路线

今天我来给大家分享我学习Java的经历和学习路线。很多关注我的小伙伴们都是因为想学习Java或者学习编程,对编程比较感兴趣。 Java是一门非常有用的编程语言,它应用广泛,包括大数据、人工智能、物联网等领域。对于程序员来说,学习…

2020年团体程序设计天梯赛-模拟赛

L1-5 判断题 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数&#xf…

SMART系统—系统功能管理模块设计与开发

SMART系统是一个在语言上采用跨平台的JAVA技术、在框架架构上采用流行的MVC架构、在业务架构中采用Spring的IOC思想和ORM技术的一个新型智能在线考试信息管理系统,该系统主要实现了学生在线考试与评估以及教师对学生在线考试信息的管理和维护。本文设计的系统管理功…

求二叉树的先序遍历

文章目录 求二叉树的先序遍历程序设计程序分析求二叉树的先序遍历 【问题描述】已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 【输入形式】 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示…

干货分享 | 一文了解交互式应用程序安全测试(IAST)技术

软件开发过程中&#xff0c;安全检测极为重要。带有漏洞的软件一旦被恶意利用&#xff0c;将造成数据泄露、业务瘫痪&#xff0c;为企业带来不可估量的损失。这就要求企业在系统开发初期发现系统安全问题&#xff0c;快速定位应用漏洞并修复&#xff0c;从源头减少开发过程中的…

Apache Flink ML 2.2.0 发布公告

来源 | Apache Flink 官方博客 翻译 | 林东 Apache Flink 社区很荣幸地宣布 Apache Flink ML 2.2.0 版本正式发布&#xff01;本次发布的版本重点添加了 Flink ML 中的特征工程算法。现在 Flink ML 包含了 33 个开箱可用的特征工程算法&#xff0c;可以支持很多常见的特征工程任…

C#基础学习--异常

目录 什么是异常 try语句 异常类 catch子句 catch子句段 finally块 为异常寻找处理程序 更进一步搜索 一般法则 抛出异常 不带异常对象的抛出 什么是异常 异常是程序运行时错误&#xff0c;它违反了系统约束或应用程序约束&#xff0c;或出现了在正常操作时未预料的情…