当向json数组追加节点时,再去修改它,发现所有的该节点的数据都被修改了
当向一个json数组追加的节点被修改时,所有对象的的节点都被修改了
众所周知,追加json节点时,我们通常会直接给不存在的节点赋值
比如这样:
let json = [
{
id:'1'
},
{
id:'2'
}
]
let state = {
'onStart': false,
'onStop': false,
'shutdown': false
}
for(leti=0;i<json.length; i++) {
json.state=state
}
//结果
//json == [
// {
// id:'1',
// state:{
// 'onStart': false,
// 'onStop': false,
// 'shutdown': false
// }
// },
// {
// id:'2',
// state:{
// 'onStart': false,
// 'onStop': false,
// 'shutdown': false
// }
// }
//]
这样就得到了一个新的节点.
而这样得到的节点似乎出现了一点问题.我们试着修改其中一个数据:
json[0].state["onStart"]=true
我们希望的结果当然是
//结果
//json == [
// {
// id:'1',
// state:{
// 'onStart': true,
// 'onStop': false,
// 'shutdown': false
// }
// },
// {
// id:'2',
// state:{
// 'onStart': false,
// 'onStop': false,
// 'shutdown': false
// }
// }
//]
然而实际的结果却是
//结果
//json == [
// {
// id:'1',
// state:{
// 'onStart': true,
// 'onStop': false,
// 'shutdown': false
// }
// },
// {
// id:'2',
// state:{
// 'onStart': true,
// 'onStop': false,
// 'shutdown': false
// }
// }
//]
造成这种情况的原因是:
由于state是引用变量 ,进行引用赋值 , 其实还是原来的数组 , 也就是说 ,我赋给json.state,其实一直都是同一个地址里存的同一个数组 , 所以 ,修改后 ,每个引用都一起改掉了 , 那么怎么解决呢 ?
json.state = JSON.parse(JSON.stringify(state )) ;
原理就是先把数组转换成字符串再转换成对象 ,这样会新分配一块内存新创建一个对象.
当向json数组追加节点时,再去修改它,发现所有的该节点的数据都被修改了的更多相关文章
- Json数组追加数据
背景:在做一个购物车的时候,点击第一个商品,然后存入一个json数组中,点击第二个商品的时候,又继续在json数组中追加,代码如下: <script type="text/javasc ...
- javascript查找子节点时,html里的换行可能会被当成节点
1.直接去HTML里找到该换行的地方去掉换行 2.写一个方法把元素类型为空格而且是文本都删除 function del_ff(elem){ var elem_child = elem.childNod ...
- 不用再去找rem了,你想要的rem都在这
一.兼容性. 目前,IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem(大胆用吧,目前几乎所有手机浏览器都支持rem) 二.什么是rem. rem是相对于根元素 ...
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题
这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...
- 表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这种写法就是把组件嵌套改为配置方式
表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这 ...
- 当返回值为json字符串时 如何获得其中的json数组
json数据格式 {"IPPORT":"192.168.0.12","time":"2017-04-05 09:12:06&quo ...
- JSON 数组格式
JSON 数据格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人 ...
- [转]用GSON 五招之内搞定任何JSON数组
关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 <Google Gson的使用方法,实现Json结构的相互转换> ,写的很好,通俗易懂. 我为什么写这篇文章呢?因为前几晚跟 ...
- [转] Android:用GSON 五招之内搞定任何JSON数组
[From] http://www.open-open.com/lib/view/open1472632967912.html 写在前面 关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 ...
随机推荐
- vue composition api 访问 原vue2中 this.$refs
1 <el-form class="user-form" ref="ruleFormRef" :model="userForm" st ...
- 再用RNN神经网络架构设计生成式语言模型
上一篇:<用谷歌经典ML方法方法来设计生成式人工智能语言模型> 序言:市场上所谓的开源大语言模型并不完全开源,通常只提供权重和少量工具,而架构.训练数据集.训练方法及代码等关键内容并未公开 ...
- three.js 性能优化之模型转化与压缩
模型转换 obj转gltf 安装插件 npm i -g obj2gltf 执行转换命令 obj2gltf -i 11-6.obj -o 11-6.gltf -u 模型压缩 安装gltf-pipelin ...
- uni-app小程序项目使用iconfont字体图标
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app. 为什么要这么做? 借 ...
- Fiddler对手机APP进行抓包
1.下载安装Fiddler 2.打开Fiddler菜单项Tools-> Options->HTTPS 勾选CaptureHTTPS CONNECTs,点击Actions, 勾选Decryp ...
- LNMP Wordpress phpMyAdmin的部署记录
背景 CentOS 8.2服务器,使用的虚拟服务器.只开放22与80端口.设置默认页面是wordpress的入口,phpmyadmin使用虚拟目录的形式进行访问. 安装 总体思路按照此文章进行.我进行 ...
- 15条 Karpenter 最佳实践,轻松掌握弹性伸缩
Karpenter 是一款高性能.灵活的开源 Kubernetes 集群自动扩展工具,目前已支持 AWS 和阿里云.它可以根据不断变化的应用负载,快速启动大小合适的计算资源,进而提升应用的可用性. 相 ...
- Unix和Windows操作系统中路径中的正斜杠和反斜杠的区别
- 【狂神说Java】Java零基础学习笔记-异常
[狂神说Java]Java零基础学习笔记-异常 异常01:Error和Exception 什么是异常 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程 ...
- 高通MSM8909 Mutil-HAL Sensor 调试
Mutil-HAL的介绍: Sensors Multi-HAL 是一个框架,允许传感器 HAL 与其他传感器 HAL 一起运行. Sensors Multi-HAL 动态加载作为动态库存储在供应商分区 ...