JavaScript移除对象中不必要的属性

article/2025/3/3 17:39:09

Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想。

业务开发中,我们经常会遇到:基于后端返回接口数据,前端保存到对象 Object 中,前端开发过程中为了一些场景的便利性,需要在该对象中增加相应的属性,但这些属性对于后端没有意义,保存提交时希望删除掉。

真实业务代码:保存前需要删除对应的 *Value 字段

async saveData (type, data) {// 提交时删除多余字段delete data.isCommonValuedelete data.isRemoteValueawait this.$request({...API.EDIT_SERVICE,method: type === 'add' ? 'post' : 'put',data})
}

上述是大家普遍的写法,但部分场景下上述写法并不是最优写法,且可能会带来一些副作用。下面通过 示例 的方式阐述一下:

示例

为了更好的展示上述情况,我们重新编写示例(仅为说明实现)。

let person = {id: '001',name: 'ligang', email: 'xxx@x.com'
}

诉求:在提交给后端时,需要删除 email 字段。

方式一:delete 删除

同上述给到的业务代码处理方式一样

delete person.email
console.log(person)	// {id: '001', name: 'ligang'}

原数据中的相关属性也会删除掉。

Reflect.deleteProperty() 允许用于删除属性,同上述 delete 行为一致。

Reflect.deleteProperty(person, 'email')

方式二:解构

形成新的对象,避免在引用原始对象的地方产生副作用。

let {id, name} = person
let newPerson = {id, name}
console.log(newPerson) // {id: '001', name: 'ligang'}

会和原数据切断引用。对于保留属性个数少,该方式处理简单且易懂;保留属性过多的场景会比较复杂。

let {email, ...newPerson} = person
console.log(newPerson) // {id: '001', name: 'ligang'}

会和原数据切断引用。对于保留属性个数多,该方式处理简单且易懂;保留属性过少的场景会比较复杂。

总结

实际使用中,强烈建议方式二来操作,不要影响原数据。特别是在mvvm框架中,原数据往往是响应式的,delete/deleteProperty 意味着切断“响应关系”,delete 操作之后的数据响应就会有问题。
在这里插入图片描述

data () {return {person: {name: 'ligang',email: 'x@x.com'}}
},
methods: {deleteProp () {delete this.person.email// this.$delete(this.person, 'email')},addProp () {this.person.email = 'xxx'this.$set(this.person, 'address', 'xxx')}
}
  1. 执行 delete 操作,js 对象属性剔除掉了,但页面没有及时响应,可以使用 vue 中的 this.$delete() 确保删除能触发更新视图

  2. 执行 add 操作,重新添加 email 及 address 属性

    • this.person.email = 'xxx' 并不具备响应式
    • this.$set(this.person, 'address', 'xxx') 具备响应式

补充

对于已经创建的实例,Vue 不允许动态添加根级别的响应式 property。下述方式都无效!-- vue reactivity object

this.$set(this, 'email', '')
this.$set(this.$data, 'email', '')

http://chatgpt.dhexx.cn/article/wqMFqYAs.shtml

相关文章

js移除属性

一、效果 代码 <style>div{width:100px;height: 100px;background-color: red;}.clsP{background-color: #00FF00;}</style><body><input type"button" value"移除属性" id"btn" /><div id"dv" score&q…

合天网安实验室CTF-解密100-Funny Crypto

合天网安实验室CTF-解密100-Funny Crypto 题目描述 tgbnjuy 8ujko9 5rfgy6 相关附件 题目链接 参考解题步骤 字母被围起来的字母图示颜色tgbnjuyh红8ujko9i绿5rfgy6t蓝 提交flag&#xff1a;hit

数字取证之Autopsy ——合天网安实验室学习笔记

实验链接 Autopsy Forensic Browser 是数字取证工具-The Sleuth Kit&#xff08;TSK&#xff09;的图形界面&#xff0c;用于对文件系统和卷进行取证。通过本实验学习文件系统取证的思想与方法&#xff0c;掌握Autopsy的使用。 链接&#xff1a;http://www.hetianlab.com/exp…

【合天网安】CONN.ASP暴库漏洞实验

0x01预备知识 1、概念&#xff1a; 相对路径和绝对路径 绝对路径&#xff1a;例如D&#xff1a;/test/test.mdb 相对路径&#xff1a;例如/test/test.mdb 2、%5C暴库 简单点说&#xff0c;就是在打开页面的时候把网页中的/换成%5C&#xff0c;然后提交就可以得到数据库地址…

【合天网安】FCKeditor 2.4.3文件上传漏洞

【合天网安实验室】FCKeditor 2.4.3文件上传漏洞 编辑器漏洞 常见的文本编辑器有FCKeditor、Ewebeditor、UEditor、KindEditor、XHeditor等&#xff0c;它们包含的功能类似&#xff0c;如图片上传、视频上传、远程下载等。使用这类编辑器减少了程序开发的时间&#xff0c;但也…

摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记

实验链接 通过学习本实验理解摩尔斯电码和栅栏密码的编码解码过程&#xff1b;掌握编写摩尔斯电码的编码解码程序和编写多功能栅栏密码的编码解码程序。 链接&#xff1a;http://www.hetianlab.com/expc.do?ce64d3e661-ebbb-41fd-a220-a17d608f994e 实验简介 实验所属系列…

【合天网安】DoraBox之文件包含及任意文件读取漏洞

【合天网安实验室】DoraBox之文件包含及任意文件读取漏洞 目的&#xff1a; 过DoraBox靶场系列练习&#xff0c;学习任意文件包含、目录限制文件包含及任意文件读取漏洞的利用过程。 实验过程&#xff1a; 1.确保Apache、MySQL服务正常开启 2、查看.txt文本内容 3.使用includ…

合天网安实验室-sql注入实验一

根据指导书我们要先在实验机进入这个网址http://10.1.1.11:81 进入之后会看到三个实例。 实例一 根据指导书的提示来做这一题。后面两个实例也要看这个指导书。 先判断是否存在注入 方法一 在参数后面加上单引号,比如: http://xxx/abc.php?id1’ 如果页面返回错误&#xff…

合天网安《Weekly CTF》第四周

Check your source code 题目介绍 打开靶机&#xff0c;进步网站&#xff0c;是一个登陆框 首先&#xff0c;根据题名的提示&#xff0c;f12&#xff0c;发现存在source.txt 打开source.txt&#xff0c;出现源码 对源码进行分析 <?php $flag "XXXXXXXXXXXX"…

计算机取证之Xplico ——合天网安实验室学习笔记

实验链接 Xplico是一款开源的网络取证分析工具&#xff0c;其分析与呈现的能力非常强大。Xplico可以捕获Internet网络应用层流量&#xff0c;通过流量解析&#xff0c;解析出网络包中的各种应用数据&#xff0c;还原网络数据发送现场。通过本实验学习掌握Xplico使用方法&#…

合天网安实验室CTF-Exp200-Come on,Exploit me!

合天网安实验室CTF-Exp200-Come on,Exploit me! 题目描述 Audrey Tang. ⊙.⊙ 我只能说到这儿了 相关附件 exp200 题目链接 参考解题步骤 1、下载附件先用VSCode打开看看 换个行看看 通过and换行有68行 2、根据题目描述猜测   如果没有接触过perl语言看到这些文本应该…

CTF挑战赛-合天网安实验室

[TOCCTF挑战赛-合天网安实验室逆向解析] http://www.hetianlab.com/CTFrace.html 1.逆向100 修改后缀为.apk 安卓模拟器打开&#xff0c;发现要求输入Password 用Android逆向助手打开&#xff0c;dex转jar&#xff0c;发现明文password 输入&#xff0c;得到flag。 2.逆向200 …

内存取证之Volatility ——合天网安实验室学习笔记

实验链接 Volatility是一款顶级的开源内存取证分析工具&#xff0c;支持Windows&#xff0c;Linux&#xff0c;MaC&#xff0c;Android等系统的内存取证&#xff0c;它由Python编写成&#xff0c;通过本实验学习内存取证的思想与方法&#xff0c;掌握volatility的使用。 链接…

合天网安实验室CTF练习赛之逆向题

最近搞逆向&#xff0c;就做做CTF题吧 挑战地址&#xff1a;http://www.hetianlab.com/CTFrace.html 对linux的逆向还没深入学习&#xff0c;所以re300暂时空着 2017.11.07&#xff1a;竟然还想起有这个事情没完成....,那就现在完成re300吧&#xff1a;合天网安实验室CTF练习…

合天网安实验室CTF-解密200-找茬游戏

合天网安实验室CTF-解密200-找茬游戏 题目描述 diff 相关附件 cry200.zip 题目链接 参考解题步骤 1、下载附件解压后得到一个文件夹&#xff0c;里面有两张图片 2、直接仔细观察未发现不同之处 3、既然表面没有不同&#xff0c;那应该是内部信息不同啦&#xff0c;用binw…

合天网安实验室CTF-Steg150-一段欢快的曲调

合天网安实验室CTF-Steg150-一段欢快的曲调 题目描述 滴滴 相关附件 stego100.wav 题目链接 参考解题步骤 1、下载的附件是一段wav格式的音频&#xff0c;打开听了一下&#xff0c;确实是欢快的曲调。 2、听的时候很奇怪为什么左声道没有声音&#xff0c;直到听到第1分11秒…

CTF挑战赛-合天网安实验室-Reverse逆向200writeup

自己做的时候 那个INT3断点一直搞不定 后来按照这篇文章的方法成功 转载自合天小逆向探究断点异常 作者iFurySt 东搞西搞都在瞎搞&#xff0c;今天到合天上面看到一个逆向题(RE200)&#xff0c;拿下来搞了一下&#xff0c;学到了点东西&#xff0c;分享一下。 首先当然是…

合天网安实验室CTF-Web100-Give Me Flag

合天网安实验室CTF-Web100-Give Me Flag 题目描述 哎,不小心把代码弄乱惹 相关附件 web100.zip 题目链接 参考解题步骤 1、下载附件打开后是一段JavaScript代码&#xff0c;但看起来被混淆了 源文件是没有换行的&#xff0c;我这里手动换行以便观察 2、试了一下直接翻译&…

合天网安实验室-第十六周-有点另类的SSRF

正式开始之前先普及一下SSRF漏洞的相关协议&#xff08;普及内容摘自大佬博客&#xff1a;https://www.anquanke.com/post/id/262430#h3-4&#xff09; File协议 读取本地文件用的 HTTP协议 探测一下内网活着的主机&#xff08;但是很多不会开Http协议&#xff0c;没多大用&…

合天网安实验室CTF-基础50-0x01

合天网安实验室CTF-基础50-0x01 最近无聊时准备刷点题&#xff0c;由简到难慢慢来吧 题目描述 真的不能再简单了! 相关附件 misc50.zip 题目链接 参考解题步骤 1、下载下来的压缩包解压后只有一个misc50.exe文件 2、先用sublime打开看一下&#xff0c;竟然是flag{666C616…